我正在尝试显示(Box绘图范围:2500–257F)中的Unicode字符.它应该是标准的utf8(Unicode标准,版本6.2).我根本做不到.
我首先尝试使用旧的ASCII字符,但是Linux终端显示在utf8中,并且没有显示任何转换(符号?).
任何人都可以回答以下问题:
>如何在C变量(样式wchar_t)中编码Unicode字符?
>如何对Unicode使用转义序列,例如0x或0o(十六进制,十进制)?
我认识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的代码…实际上,它们不是没错
感谢您的提前帮助…
解决方法:
使用包含这些字符的utf-8版本字节的Cstring.如果您打印该字符串,它将打印该字符.
您的两个字符的示例:
#include
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.
编辑:当我写这篇文章时,你的问题改变了一点.我的回答现在不那么重要了.
但是从您的症状来看-如果您看到一个?对于您期望的每个字符,我想说您的终端字体可能缺少这些字符所需的字形.
标签:unicode,c-3,linux
来源: https://codeday.me/bug/20191031/1975222.html