簡體   English   中英

UTF-16到UTF8的WideCharToMultiByte問題

[英]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”。

您不會顯示用於讀取文件的代碼,但這是正確執行此操作的一種方法:

https://stackoverflow.com/a/10504278/365496

您正在錯誤地讀取文件。 輸入的轉儲將以寬字符顯示單個字節。 輸出的轉儲是將L"\\xff\\xfe\\x43"編碼為UTF-8產生的字節序列。 該字符串在輸入的第一個\\x0000處被截斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM