考虑以下计划:
#include <stdio.h>
#include <string.h>
int main() {
char* alpha = "Ω";
fwrite(alpha, 1, strlen(alpha), stdout);
return 0;
}
在Windows上,我得到以下输出:
��
我尝试将线路更改为:
char* alpha = "zΩ";
并正确打印。输出编码正确,只是不打印 正确地:
$ bad | od -tx1c 0000000 ce a9 316 251 $ good | od -tx1c 0000000 7a ce a9 z 316 251
如何使用非ASCII的fwrite作为第一个字符?
回复一些评论:源文件格式正确为UTF-8,我的代码页也正确设置为UTF-8:
$ chcp.com Active code page: 65001
答案 0 :(得分:1)
在Windows fwrite
内部调用WriteFile
,在这种情况下不正确。我的
解决方案是直接调用WriteFile
:
#include <windows.h>
int main() {
char* alpha = "Ω";
DWORD bravo;
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), alpha, strlen(alpha), &bravo, 0);
return 0;
}