String 乱码问题怎么解决?
AnsiString不会有乱码(但不能移植),UNICODE版本的会有乱码。
测试程序:
//---------------------------------------void __fastcall TForm4::Button4Click(TObject *Sender){ AnsiString ansistr = "ansi string kk大厦大厦大厦大厦大厦kkkkkkkkkk"; String str = L"unicode string 大厦大厦大厦大厦大厦kkkkkkkkkkkk"; Memo1->Lines->Add(ansistr); Memo1->Lines->Add(str); ansistr.c_str(); str.w_str(); Memo1->Lines->Add(ansistr); Memo1->Lines->Add(str + ansistr); MessageBoxA(Handle,str.t_str(),"ok",0); MessageBoxW(Handle,str.w_str(),L"ok",0); str = ansistr; MessageBoxA(Handle,str.t_str(),"ok",0); str = AnsiString(str); MessageBoxA(Handle,str.t_str(),"ok",0);}//---------------------------------------
wchar_t TT[200]; lstrcpyW(TT,str.w_str()); MessageBoxW(Handle,TT,L"ok",0);
[解决办法]
先复制一个以前我的回复:
String在C++Builder2010中,有三个函数将其转化成字符串,并且根据工程选项中对_TCHAR宏映射定义的不同,略有差异(注意.t_str的方法在XE2中已经固定返回wchar_t *了):
方法 _TCHAR映射为char _TCHAR映射为wchar_t-----------------------------------------------------.c_str() 返回wchar_t * 返回wchar_t * .w_str() 返回wchar_t * 返回wchar_t *.t_str() 返回char * 返回wchar_t *