unicode hello world for C?

num*_*ric 10 c unicode utf-8

我想从C输出像안,蠀,things这样的东西

#include <wchar.h>
int main()
{
    fwprintf(stdout, L"?, ?, ?\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是?,?,?

如何打印这些字符?

编辑:

#include <wchar.h>
#include <locale.h>
int main()
{
    setlocale(LC_CTYPE, "");
    fwprintf(stdout, L"?, ?, ?\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这样做了.输出是안,蠀,☃.除了中文字符和雪人在我的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
Run Code Online (Sandbox Code Playgroud)

我必须另外启用哪个区域设置才能显示中文字符和雪人?也许我需要字体?

以上程序将在Windows上运行吗?

Aln*_*tak 9

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

在Linux(使用Bash shell)上,尝试:

$ LANG=en.UTF-8
Run Code Online (Sandbox Code Playgroud)

并确保您的终端仿真器实际上可以显示Unicode并配置为执行此操作.


小智 6

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

首先,您是否在启用unicode支持的情况下进行编译?你需要在Windows下执行此操作(-D UNICODE -D __UNICODE).

第二,你是否发出了一个支持unicode的命令行,原则上它还包含一个包含你正在发出的字符的字形的字体?

第三,编译器使用的unicode编码与命令行匹配吗?当命令行期望UTF8时,在二进制文件中使用UCS2是没有用的.

你基本上需要真正理解Unicode及其编码,才能做到这一点.不要想象它是直截了当的,或者你不需要学习所有基本概念; 这些东西不会偶然发生,因为有太多东西必须完全正确.


Fab*_*der 1

您必须配置您的系统以接受这些字符。你用什么?Windows、Linux?