【发布时间】:2019-04-09 04:34:33
【问题描述】:
我想打印单词“česnek”的单个字节,期望打印 7 个字节,因为“č”被编码为 2 个字节,但它会在终端中打印诸如问号之类的垃圾字符。如果我打印出整数值,我会得到这个序列。
-60 -115 101 115 110 101 107
为什么前两个数字是负数? 这是我用来尝试的代码。
char *utfstring = "česnek";
for(size_t i = 0; i < strlen(utfstring); i++) {
printf("%c ", utfstring[i]);
}
for(size_t i = 0; i < strlen(utfstring); i++) {
printf("%d ", utfstring[i]);
}
我希望前两个值是 c4 8d 因为 č 是根据 https://www.utf8-chartable.de/unicode-utf8-table.pl?start=256&unicodeinhtml=dec 编码的
【问题讨论】:
-
在某些系统上
char是signed,在其他系统上是unsigned -
写。 “负数”:尝试“%u”作为无符号十进制数。
-
必须在系统上安装此字符的正确字体,并且给定的终端程序可以访问。在我的系统上,使用
printf("%s\n",utfstring);在"%c "上循环将不 工作(注入空间中断utf-8序列)。编译器不关心这个。printf和%s也没有,因为它只看到一串字节。只有终端程序/字体会关心。最好使用%2.2X打印单个字符以单独查看[如有疑问,请针对0xFF屏蔽该值以避免char的符号扩展]。