使用非ASCII字符的fwrite

时间:2015-06-21 06:01:40

标签: c windows fwrite non-ascii-characters

考虑以下计划:

#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

1 个答案:

答案 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;
}