我有一个utf-8文件,可以用widechar函数正常处理。
不过,现在我需要转换并以多字节的形式使用它们,我正在努力使其工作。
printf("%s\n",setlocale(LC_CTYPE, "")); //English_United States.1252
_setmbcp(_MB_CP_LOCALE);
FILE *f = NULL;
f = _wfopen(L"data.txt", L"r,ccs=UTF-8");
wchar_t x[256];
fwscanf(f, L"%ls", x); //x = L"một"
char mb[256];
int l = wcstombs(mb, x, 256); //mb = "m?t"
我做错了什么?
最佳答案
在文本文件中,您有字符ộ
(注意字符下面的点)而不是ô
。
字符ô
存在于codepage 1252中,但字符ộ
不存在,因此wcstombs
将其转换成?
。
如果您的UTF-8编码文本文件包含例如西里尔或希腊字符,您也会遇到同样的问题。
唯一的解决方案是不要使用代码页1252中没有表示的字符。