1

如何打印一些 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。

4

2 回答 2

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
¢¡ 
$

如果你真的很好,你可以看到倒惊叹号后面的不间断空格…

于 2013-04-05T14:27:51.000 回答
0

0xc282c281c280是一个整数。你想用一个序列初始化数组:char s[] = { 0xc2, 0x82, 0xc2, 0x81, 0xc2, 0x80, 0x00 };

于 2013-04-05T14:14:11.530 回答