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上工作吗?
您必须将系统配置为接受这些字符。你在用什么? 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。
你使用的是Windows还是Linux? – Zifre 2009-04-24 21:13:23
该死的,什么是错的我的电脑,因为我还看到那些?在代码示例中! – alvatar 2009-04-24 21:13:29
试试你的编码设置为Unicode(UTF-8)(在Firefox中,查看 - >字符编码) – 2009-04-24 21:18:41