2

我在使用 RAD Studio 2009 时遇到了一点问题。
如您所知,可以在 MSVS 中关闭 Unicode 支持(右键单击解决方案->属性->字符集=未设置)。我需要在 RAD Studio 中找到这个功能,我知道它存在但不知道具体在哪里。
这是唯一阻止我在 Socket Chat 大学项目上工作的事情。
PS 这个问题是在我从 CodeGear 官方网站安装更新后出现的。

4

7 回答 7

12

简短回答:不,RAD Studio 2009 中没有关闭 Unicode 的功能。

于 2008-12-18T02:08:54.653 回答
3

您必须小心使用 UnicodeString::t_str() 方法。如果在为 Ansi 而不是 Unicode 编译的项目中调用它,t_str() 会更改 UnicodeString 的内部内容。这可能会产生意想不到的副作用,尤其是对于来自控件的 UnicodeString 值。

于 2009-02-13T02:24:03.680 回答
3

chester - 你不需要直接调用 WideCharToMultiByte()。让 RTL 为您完成工作:

AnsiString s = Form2->Edit1->Text;
MessageBoxA(NULL, s.c_str(), "It`s ok", MB_OK);
于 2009-02-13T02:25:36.950 回答
1

是否可以关闭它?更好的问题是:你应该把它关掉吗?答案是:不。

设计应用程序以便在序列化时正确发送 Unicode 字符(例如,在应用程序的套接字中)比在 Unicode 世界中设计非 Unicode 程序要远得多。即使对于一个简单的项目,原则上也值得学习 Unicode。

于 2009-01-04T09:29:10.073 回答
1

准确地说,您可以通过修改“TCHAR maps to char”的项目选项来构建您的 C++ Builder 应用程序,而无需定义 #UNICODE 标志。

这意味着 SendMessage 将调用 SendMessageA 等,而 TCHAR

但是,如果您使用任何 VCL 函数,则没有非 unicode 等效项。VCL 现在是固有的 Unicode,并且无法更改。

回复:您的“解决方案”-有一种更简单的方法。它适用于 TCHAR = char 或 wchar_t:

MessageBox(NULL, Form2->Edit1->Text.t_str(), _TEXT("It`s ok"), MB_OK);
于 2009-01-13T15:07:57.490 回答
1

有一个更好的方法,我这样做:

MessageBox(NULL, Form2->Edit1->Text.w_str(), L"It`s ok", MB_OK);
于 2010-04-19T14:31:57.630 回答
0

我已经通过这种方式解决了这个问题:


    wchar_t* str = Form2->Edit1->Text.w_str();
    char* mystr = new char [Form2->Edit1->Text.Length() + 1];
    WideCharToMultiByte(CP_ACP, 0, str, -1, mystr, Form2->Edit1->Text.Length() + 1, NULL, NULL);
    MessageBox(NULL, mystr, "It`s ok", MB_OK);
    delete []mystr;

但在我看来,还有另一种方式

于 2008-12-17T22:13:17.203 回答