c - 为什么我将环境设置为 UTF8 却没有打印出这些 Unicode 字符?

标签 c linux unicode

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

最佳答案

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

相关文章:

linux - 如何在 Linux 上自动进行 FTP 文件传输?

c++ - 无需等待在命令行应用程序中按下输入即可获取键盘事件

java - 通过正则表达式删除所有非打印字符

python - 在 Python 3 中测试 UnicodeDecodeError

linux - 在 Linux 中通过 PCI 将视频数据传输到设备的最佳方式

c++ - 在 C++ 中什么时候使用 WCHAR 什么时候使用 CHAR

c++ - 使用 "template"编写 C 或 C++ 库

mysql - 检查mysql表中是否存在列名

c - 如何将 CSV 文件中的数据存储到结构中,然后返回该结构

在 Win 10 上对 NetShareEnum 的 C 调用失败并显示 5 'Access Denied',而同一用户可以浏览 SMB 共享