我有一个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中没有表示的字符。

10-07 19:15
查看更多