这是我的C代码:
int main(){
_setmode(_fileno(stdout), _O_U16TEXT);
FILE* myFile = fopen("text.txt", "r");
wchar_t line[100];
fgetws(line,100,myFile);
clear();
initscr();
addwstr(L"♠♣♥♦\n");
addwstr(line);
refresh();
getchar();
endwin();
return 0;
}
text.txt文件只是:
♠♣♥♦
第一个显示确定,但第二个只是一系列奇怪的角色。谁知道为什么?
答案 0 :(得分:0)
gcc将第二种情况下的参数表示为wchar_t
的数组(使用 L"
前缀),而fgetws
返回{的数组{1}}(UCS-2或UCS-4,取决于平台:如果您使用Windows,通常是前者)。
但是,从文件读取的数据可能不同,因为:
wchar_t
函数期望(或不期望)字节顺序标记您可以通过数据文件的转储(hexdump或od)看到这种差异,并将测试程序中读取/使用的实际数据打印为数字数组。由于这些宽字符使用多字节编码作为其外部表示,如果字节顺序不匹配,您将看到垃圾。
例如,外部文件可能被编码为UTF-8(这听起来像MinGW),fgetws
只能期望UTF-16(或反向)。但首先要确切地看到数字的样子会显示问题。