我对RAD Studio 2009有点麻烦。
如您所知,可以在MSVS中关闭Unicode支持(右键单击solution-> properties-> character set = not set)。我需要在RAD Studio中找到这个功能,我知道它存在,但不知道究竟在哪里
这是唯一阻止我在Socket Chat大学项目上工作的东西
附:从CodeGear官方网站安装更新后出现问题。
答案 0 :(得分:12)
简短回答:不,在RAD Studio 2009中没有关闭Unicode的功能。
答案 1 :(得分:3)
您必须小心使用UnicodeString :: t_str()方法。如果在为Ansi而不是Unicode编译的项目中调用它,则t_str()会更改UnicodeString的内部内容。这可能会产生意想不到的副作用,尤其是对于来自控件的UnicodeString值。
答案 2 :(得分:3)
chester - 您无需直接调用WideCharToMultiByte()。让RTL为您完成工作:
AnsiString s = Form2->Edit1->Text;
MessageBoxA(NULL, s.c_str(), "It`s ok", MB_OK);
答案 3 :(得分:1)
可以关掉它吗?更好的问题是:你应该把它关掉吗?答案是:NO。
设计应用程序以便在序列化时(例如,在应用程序的套接字中)正确发送Unicode字符,而不是在Unicode世界中设计非Unicode程序。即使是一个简单的项目,原则上也值得学习Unicode。
答案 4 :(得分:1)
准确地说,您可以通过修改“TCHAR映射到char”的项目选项来构建未建立#UNICODE标志的C ++ Builder应用程序。
这意味着SendMessage将调用SendMessageA等,以及TCHAR
但是,如果您正在使用任何VCL函数,那么这些函数没有非unicode。 VCL现在是继承的Unicode,不能更改。
Re:你的“解决方案” - 这是一种更简单的方法。它适用于TCHAR = char或wchar_t:
MessageBox(NULL, Form2->Edit1->Text.t_str(), _TEXT("It`s ok"), MB_OK);
答案 5 :(得分:1)
有更好的方法,我这样做:
MessageBox(NULL, Form2->Edit1->Text.w_str(), L"It`s ok", MB_OK);
答案 6 :(得分: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;
但在我看来还有另一种方式