wcstombs无法正常工作

时间:2017-08-07 04:17:49

标签: c visual-studio unicode

我有一个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"

我做错了什么?

1 个答案:

答案 0 :(得分:2)

在您的文本文件中,您有字符(请注意字符下方的点),而不是ô

ô中存在字符,但字符wcstombs没有,因此?会将其转换为{{1}}。

如果您的UTF-8编码文本文件包含例如西里尔字母或希腊字符,则会遇到同样的问题。

唯一的解决方案是没有在代码页1252中没有表示的字符。