我正在尝试显示(Box Drawing Range:2500-257F)中的Unicode字符。它应该是标准的utf8(Unicode标准,版本6.2)。我根本无法做到。
我首先尝试使用旧的ASCII字符,但Linux终端显示在utf8中,并且没有显示转换(符号?)。
任何人都可以回答这些问题:
style wchar_t
)中编码unicode字符?我知道U +,但似乎没有用。
setlocale(LC_ALL,"");
short a = 0x2500, b = 0x2501;
wchar_t ac = a;
wchar_t bc = b;
wprintf(L"%c%c\n", ac, bc);
exit(0);
我知道结果与使用的字体有关,但我使用的是utf8字体(http://www.unicode.org/charts/fonts.html),必须显示2500到257F的代码...实际上他们不是。
提前感谢您的帮助......
答案 0 :(得分:4)
使用包含这些字符的utf-8版本字节的Cstring。如果您打印该Cstring,它将打印该字符。
你的两个角色的例子:
#include <stdio.h>
int main (int argc, char *argv[])
{
char block1[] = { 0xe2, 0x94, 0x80, '\0' };
char block2[] = { 0xe2, 0x94, 0x81, '\0' };
printf("%s%s\n", block1, block2);
return 0;
}
为我打印─━
。
此外,如果您在其中的某处打印包含uft-8字符字节的Cstring,它将打印这些字符而不会出现问题。 / *假设您使用gcc * / 而且IIRC gcc在内部使用utf-8。
编辑:在我写这篇文章时,你的问题有所改变。而我的答案现在不那么重要了。 但是从你的症状 - 如果你看到一个?对于你期望的每个字符,我会说你的终端字体可能缺少这些字符所需的字形。
答案 1 :(得分:0)
这取决于你所谓的“终端”。
linux控制台使用各种黑客来显示unicode,但实际上它的字体仅限于512个符号IIRC,因此它无法真正显示整个unicode范围,它可以显示的内容取决于加载的字体(这可能会改变未来的)。
用于访问Linux的Windows终端通常会以某种方式单独使用。
物理终端通常更糟糕,只能在ascii-land中运行
Linux GUI终端(例如gnome-terminal)可以显示所有内容,只要你有相应的字体。
您确定不想使用ncurses而不是编写自己的终端小部件吗?