【发布时间】:2016-01-22 01:14:09
【问题描述】:
我正在尝试在 C 中打印这个中等阴影 unicode 框:▒
(我在 K&R 中做练习,然后在制作直方图的问题上偏离了方向……)。我知道我的 unix 术语 (Mac OSX) 可以显示该框,因为我使用该框保存了一个文本文件,并使用了 cat textfilewithblock 并打印了该块。
到目前为止,我最初尝试过:
#include <stdio.h>
#include <wchar.h>
int main(){
wprintf(L"▒\n");
return 0;
}
什么都没有打印出来
iMac-2$ ./a.out
iMac-2:clang vik$
我搜索了一下,发现了这个:unicode hello world for C?
而且似乎我仍然需要设置一个语言环境(即使执行环境是 utf8?我仍在试图弄清楚为什么这一步是必要的)但无论如何,它有效! (经过一番挣扎,终于意识到正确的字符串是en_US.UTF-8,而不是我在某处读过的en_US.utf8……)
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(){
setlocale (LC_ALL, "en_US.UTF-8");
wprintf(L"▒\n");
return 0;
}
输出如下:
iMac-2$ ./a.out
▒
iMac-2$
但是当我尝试以下代码时...输入 UTF-8 十六进制(我从这里得到:http://www.utf8-chartable.de/unicode-utf8-table.pl?start=9472&unicodeinhtml=dec),即 0xe29692 的盒子而不是粘贴盒子本身,它不起作用再次。
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(){
setlocale (LC_ALL, "en_US.UTF-8");
wchar_t box = 0xe29692;
wprintf(L"%lc\n", box);
return 0;
}
我显然遗漏了一些东西,但无法弄清楚它是什么。
【问题讨论】:
-
我应该注意,我正在使用以下编译器命令:
cc --std=c11 -
在 Mac OSX 上,您不需要
wchar.h、wprintf、L前缀或setlocale。如果你想打印一个盒子,就打印一个盒子:printf("▒\n"); -
@user3386109:它实际上取决于文本编辑器:它必须配置为将源文件保存为
UTF-8。 -
使用
setlocale(LC_ALL, "");设置默认语言环境。使用setlocale(LC_ALL, "C");设置C 语言环境。所有其他名称都是实现定义的。您的第二个示例在我的 Mac 上使用空字符串作为语言环境名称(就像使用您提供的全名一样)。我也可以肯定你的原始代码没有输出。