Symbian里面使用ConvertFromUnicodeToUtf8轉(zhuǎn)換中文為什么是亂碼?轉(zhuǎn)換英文是正常的。因?yàn)橐?6位的Unicode漢字保存到文件,所以必須轉(zhuǎn)換成UTF8。
1 void MyUnicode2Utf8::ToUtf8FromUnicode(TDesC16 &aUnicode)
{
if(ibuf8) delete ibuf8;
if(ibuf) delete ibuf;
/ / 如果是中文字符, 這里乘3是正確的, 但是如果是英文就會(huì)有問(wèn)題, 因?yàn)樗疾粷M, 所以會(huì)有空格出現(xiàn)
int len = aUnicode.Length() * 3 + 1;
ibuf8 = HBufC8::NewL(len);
ibuf = HBufC::NewL(len);
TPtr8 ptrUtf8 = ibuf8->Des();
CnvUtfConverter::ConvertFromUnicodeToUtf8(ptrUtf8, aUnicode);
ibuf->Des().Copy(ptrUtf8);
}
2 The second one takes each character and convert it to the other format. The 16-bit to 8-bit conversion may not always succeed in this case:
Code:
// Get a iBuf8 from a iBuf16 (data are modified)
CnvUtfConverter::ConvertFromUnicodeToUtf8(iBuf8,iBuf16);
// Get a iBuf16 from a iBuf8 (data are modified)
CnvUtfConverter::ConvertToUnicodeFromUtf8(iBuf16,iBuf8);
This second method requires to include the utf.h header and to link against charconv.lib.