为什么PDcurses显示的字符串与源文件和流不同?
这是我的C代码:为什么PDcurses显示的字符串与源文件和流不同?,c,stream,ncurses,widechar,pdcurses,C,Stream,Ncurses,Widechar,Pdcurses,这是我的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()
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文件只是:
♠♣♥♦
第一个显示ok,但第二个只是一系列奇怪的角色。有人知道为什么吗?gcc将第二种情况下的参数表示为
wchar\u t
数组(使用L“
前缀),而fgetws
返回wchar\u t
数组(UCS-2或UCS-4,取决于平台:如果使用Windows,通常是前者)
但是,从文件读取的数据可能不同,因为:
- 字节顺序不同,这可能是因为
函数需要(或不需要)字节顺序标记fgetws
- 而实际数据与预期不符
例如,外部文件可能被编码为UTF-8,而
fgetws
只需要UTF-16(或相反).但是,从查看数字的确切外观开始,就会发现问题所在。您尝试过设置区域设置吗?平台可能与此相关。嗯,可能C编译器在文字上不执行UTF-8。谢谢您的评论!我正在使用Windows 10中的MinGW,并在Atom中编辑C文件。