[英]UTF-16 to UTF8 with WideCharToMultiByte problems
int main(){
//"Chào" in Vietnamese
wchar_t utf16[] =L"\x00ff\x00fe\x0043\x0000\x0068\x0000\x00EO\x0000\x006F";
//Dump utf16: FF FE 43 0 68 0 E 4F 0 6F (right)
int size = WideCharToMultiByte(CP_UTF8,0,utf16,-1,NULL,0,NULL,NULL);
char *utf8 = new char[size];
int k = WideCharToMultiByte(CP_UTF8,0,utf16,-1,utf8 ,size,NULL,NULL);
//Dump utf8: ffffffc3 fffffbf ffffc3 ffffbe 43 0
}
這是我的代碼,當我將字符串轉換為UTF-8時,顯示錯誤的結果,那么我的代碼有什么問題呢?
wchar_t utf16[] = L"\uFEFFChào";
int size = 5;
for (int i = 0; i < size; ++i) {
std::printf("%X ", utf16[i]);
}
該程序打印輸出: FEFF 43 68 E0 6F
如果打印出從文件中讀取的每個wchar_t
都會打印出FF FE 43 0 68 0 E 4F 0 6F
則表示未正確從文件中讀取UTF-16數據。這些值表示UTF-16字符串: L“ÿþC\\ 0h \\0à\\ 0o”。
您不會顯示用於讀取文件的代碼,但這是正確執行此操作的一種方法:
您正在錯誤地讀取文件。 輸入的轉儲將以寬字符顯示單個字節。 輸出的轉儲是將L"\\xff\\xfe\\x43"
編碼為UTF-8產生的字節序列。 該字符串在輸入的第一個\\x0000
處被截斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.