unicode hello world for C?

问题描述:

我试图像안,蠀输出的东西,☃由Cunicode hello world for C?

#include <wchar.h> 
int main() 
{ 
    fwprintf(stdout, L"안, 蠀, ☃\n"); 
    return 0; 
} 

输出?,?,?

如何打印这些字符?

编辑:

#include <wchar.h> 
#include <locale.h> 
int main() 
{ 
    setlocale(LC_CTYPE, ""); 
    fwprintf(stdout, L"안, 蠀, ☃\n"); 
    return 0; 
} 

这并获得成功。输出是안,蠀,☃。除了中文字符和雪人在我的urxvt中显示为框,可能是因为我没有启用这些语言环境。

$ locale -a 
C 
en_US 
en_US.iso88591 
en_US.iso885915 
en_US.utf8 
ja_JP.utf8 
ko_KR 
ko_KR.euckr 
ko_KR.utf8 
korean 
korean.euc 
POSIX 
zh_CN.utf8 

哪些语言环境需要额外启用才能显示汉字和雪人?也许我需要字体?

将上述程序在Windows上工作吗?

+0

你使用的是Windows还是Linux? – Zifre 2009-04-24 21:13:23

+0

该死的,什么是错的我的电脑,因为我还看到那些?在代码示例中! – alvatar 2009-04-24 21:13:29

+4

试试你的编码设置为Unicode(UTF-8)(在Firefox中,查看 - >字符编码) – 2009-04-24 21:18:41

您必须将系统配置为接受这些字符。你在用什么? Windows,Linux?

您必须将输出终端设置为与Unicode兼容。

在Linux(和Bash shell中),尝试:

$ LANG=en.UTF-8 

,并确保您的终端仿真器实际上可以显示Unicode和配置这样做。

与c wchar_t定义为:

类型wchar_t是一种独特的类型,其值可表示不同的代码所支持的语言(22.1.1)中所指定的最大扩展字符集的所有成员。 [...]

多字节字符和wchar_t的区别:

多字节字符可能需要对于给定的字符根据编码(例如多于一个字节:UTF-8,UTF- 16)

wchar_t具有固定的大小即SIZ eof(wchar_t)是实现定义的。请注意,此宽度定义了您的wchar_t可支持的编码。所以,如果sizeof(wchar_t) == 2你不能使用UTF-32编码。

还记得wchar_t本身没有编码感。您首先必须告诉编译器必须使用哪种编码才能用于wchar_t数据。错误的输出很可能是因为字符被默认编码处理,不能正确支持这些字符,而失败的匹配导致'notdef'风格'?'输出。

获取Unicode输出的过程中有许多独立的阶段 - 所有这些阶段都必须正确配置。

首先,你支持Unicode编译启用?您需要在Windows下执行此操作(-D UNICODE -D __UNICODE)。

其次,你是否正在发射一个支持unicode的命令行,原则上都是这样,而且还有一个包含你正在发射的字符的字形的字体?

第三,你的编译器和你的命令行匹配使用的Unicode编码是否匹配?当命令行期望UTF8时,在二进制文件中使用UCS2是没有用的。

你基本上需要真正理解Unicode及其编码,才能正确使用它。不要想象它很简单,或者你不需要学习所有的基本概念;这个东西不是偶然的,因为有太多东西必须是完全正确的。

就像Alnitak建议的那样,必须指定一个包含要显示的字符的字符集/编码的区域设置。 (Unicode /)UTF-8应该覆盖所有Unicode字符。

你的终端应该使用具有相应的字形字体。

对于超过8位的字符集,Windows'CMD.EXE出了名的弱点。也许,你需要一个GUI窗格而不是依赖于stdout。