【发布时间】:2014-05-25 19:12:26
【问题描述】:
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 时,它显示错误的结果,那么我的代码有什么问题?
【问题讨论】:
-
对于初学者,您可能想要转换整个数组,即使它不是一个宽字符串:它嵌入了零。
-
另外,unicode 不是 utf-16 的同义词。
-
@Deduplicator 不幸的是,微软不这么认为。
-
那么你能提出一个解决方案吗?如何在 C++ 中正确地制作一个 utf-16 字符串
-
@MarkRansom:没有理由增加混乱。此外,OP 肯定会很快发现 UTF-32,就像他已经为 UTF-8 所做的那样。
标签: c++ windows unicode utf-8 utf-16