Symbian里面使用ConvertFromUnicodeToUtf8轉換中文為什么是亂碼?轉換英文是正常的。因為要把16位的Unicode漢字保存到文件,所以必須轉換成UTF8。
1 void MyUnicode2Utf8::ToUtf8FromUnicode(TDesC16 &aUnicode)
{
if(ibuf8) delete ibuf8;
if(ibuf) delete ibuf;
/ / 如果是中文字符, 這里乘3是正確的, 但是如果是英文就會有問題, 因為它占不滿, 所以會有空格出現
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.