我一直在想:如果通过std::string.c_str()方法给UnicodeString 赋值的话,编码会否转换过去呢?换句话说,UnicodeString在接受一个char*指针的时候是根据什么编码来的呢?
看如下示例:
void __fastcall TForm1::FormShow(TObject *Sender)
{
unsigned char ansi[] = "测试";
unsigned char gb2312[] = "\xB2\xE2\xCA\xD4";
unsigned char utf8[] = "\xE6\xB5\x8B\xE8\xAF\x95";
unsigned char unicode[] = "\x4b\x6d\xd5\x8b";
String line = (char *)ansi;
for(int i=0; i<sizeof(ansi); i++)
{
line += IntToHex(ansi[i], 2);
}
Memo1->Lines->Add(line);
line = (char *)gb2312;
for(int i=0; i<sizeof(gb2312); i++)
{
line += IntToHex(gb2312[i], 2);
}
Memo1->Lines->Add(line);
line = (char *)utf8;
for(int i=0; i<sizeof(utf8); i++)
{
line += IntToHex(utf8[i], 2);
}
Memo1->Lines->Add(line);
line = (char *)unicode;
for(int i=0; i<sizeof(unicode); i++)
{
line += IntToHex(unicode[i], 2);
}
Memo1->Lines->Add(line);
UTF8String utf8line = (char *)utf8;
for(int i=0; i<sizeof(utf8); i++)
{
utf8line += IntToHex(utf8[i], 2);
}
Memo1->Lines->Add(utf8line);
}
答案如下: