终端:帮助理解 UTF-8 文本的行为

终端:帮助理解 UTF-8 文本的行为

我试图了解我在 Ubuntu 系统上观察到的以下行为。考虑以下两个文件:

$ hexdump -C 1.txt
00000000  d9 82 d8 a8 d8 a7 d9 86  d9 8a 5e d9 84 d9 86 d8  |..........^.....|
00000010  b2 d8 a7 d8 b1 5d 31                              |.....]1|
00000017

$ hexdump -C 2.txt
00000000  d9 82 d8 a8 d8 a7 d9 86  d9 8a 5e d9 84 d9 86 d8  |..........^.....|
00000010  b2 d8 a7 d8 b1 5d 20                              |.....] |
00000017

我们可以检查是否存在一个差异:

$ cmp 1.txt 2.txt
1.txt 2.txt differ: byte 23, line 1

然而,这是我所看到的:

$ echo $LANG
C.UTF-8
$ cat 1.txt
قباني^لنزار]1
$ cat 2.txt
قباني^لنزار]

我真的不理解这种行为。我在 utf-8 流中既没有看到 ALM(阿拉伯字母标记)Unicode 字符,也没有看到 RLM(从右到左标记)。以供参考:

  • ALM在 UTF-8 中是d89c, 而
  • RLM在 UTF-8 中是e2808f.

有人可以解释我所看到的行为吗?

以供参考:

$ head -3 /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"

$ echo $TERM
xterm-256color
$ echo $SHELL
/bin/bash
$ bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)

相关内容