如何打印一些Unicode字符?虽然我设置了utf-8编码,但无法打印。我正在以十六进制(c282c282c2800)的形式获取连续字节流中的unicode字符。但当我试图通过在开头指向字符指针来打印它的unicode字符时,它并没有打印。为什么?

   char s[]={0xc2,0x82,0xc2,0x81,0xc2,0x80,0x00};
   printf("%s",s);

在linux环境中使用c。

最佳答案

即使您的终端配置为使用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
¢¡ 
$

如果你真的很好,你可以看到在倒转的感叹号后面没有空格-

关于c - 尽管我将环境设置为UTF8,但为什么不打印这些Unicode字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15835849/

10-10 17:48