我有一个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"
我做错了什么?
答案 0 :(得分:2)
在您的文本文件中,您有ộ
字符(请注意字符下方的点),而不是ô
。
ô
中存在ộ
字符,但字符wcstombs
没有,因此?
会将其转换为{{1}}。
如果您的UTF-8编码文本文件包含例如西里尔字母或希腊字符,则会遇到同样的问题。
唯一的解决方案是没有在代码页1252中没有表示的字符。