如何打印一些Unicode字符?虽然我设置了UTF-8编码,但我无法打印它。我在连续的字节流中以十六进制形式获得Unicode字符(c2 82 c2 81 c2 80 0)。但是当我尝试通过在开头指向字符指针来打印其Unicode字符时,它不会打印。为什么呢?
char s[]={0xc2,0x82,0xc2,0x81,0xc2,0x80,0x00};
printf("%s",s);
在Linux环境中使用C.
答案 0 :(得分:4)
即使您的终端配置为使用UTF-8,您也不会看到太多,因为您正在“显示”的字符是:
0xC2 0x82 = U+0082
0xC2 0x81 = U+0081
0xC2 0x80 = U+0080
这些是C1集中的控制字符。我有一个数据文件,文件:
# C1 Controls (0x80 - 0x9F) are from ISO/IEC 6429:1992
# It does not define names for 80, 81, or 99.
80 U+0080
81 U+0081
82 U+0082 BPH BREAK PERMITTED HERE
所以你没有看到任何东西,因为你没有显示任何图形字符。例如,如果将0x82更改为0xA2(并且0x81到0xA1,以及0x80到0xA0),那么您将更有可能获得一些可见输出:
0xC2 0xA2 = U+00A2
0xC2 0xA1 = U+00A1
0xC2 0xA0 = U+00A0
A0 U+00A0 NO-BREAK SPACE
A1 U+00A1 INVERTED EXCLAMATION MARK
A2 U+00A2 CENT SIGN
$ ./x
¢¡
$
如果你真的很好,你会在倒置的感叹号后看到不间断的空间
答案 1 :(得分:0)
0xc282c281c280
是一个整数。您希望使用序列char s[] = { 0xc2, 0x82, 0xc2, 0x81, 0xc2, 0x80, 0x00 };