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时,它显示错误的结果,所以我的代码有什么问题?
答案 0 :(得分:0)
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”。
您没有显示从文件中读取的代码,但这是正确执行此操作的一种方法:
答案 1 :(得分:0)
您正在错误地阅读该文件。您的输入转储显示宽字符的单个字节。转储输出是将L"\xff\xfe\x43"
编码为UTF-8的字节序列。该字符串在输入的第一个\x0000
处被截断。