【发布时间】:2010-09-21 22:06:55
【问题描述】:
我正在玩 bash,体验 utf-8 编码。我是 unicode 新手。 下面的命令(嗯,他们的输出)让我吃惊:
$ 语言环境
LANG="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_CTYPE="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_ALL=
$ printf '1\né\n12\n123\n' | egrep '^(.|...)$'
1
é
12
$ 触摸 1 é 12 123
$ ls | egrep '^(.|...)$'
1
123
好的。两个 egrep 过滤带有一个或三个字符的行。它们的输入非常相似,但输出与字符 é 不同。有什么解释吗?
关于我的环境的更多细节:
$ unname -a
达尔文 macbook-pro-de-admin-6.local 10.4.0 达尔文内核版本 10.4.0:2010 年 4 月 23 日星期五 18:28:53 PDT;根目录:xnu-1504.7.4~1/RELEASE_I386 i386
$ egrep -V
egrep (GNU grep) 2.5.1版权所有 1988、1992-1999、2000、2001 Free Software Foundation, Inc.
这是免费软件;查看复制条件的来源。没有
保修单;甚至不是为了适销性或特定用途的适用性。
【问题讨论】:
-
比较
ls | hexdump -C和printf '1\né\n12\n123\n' | hexdump -C的输出。如果您没有hexdump,请尝试hd。 -
输出与 hexdump 不同:printf 给出 0xC3 0xA9 而 ls 为 é 吐出 0x65 0xCC 0x81。我会尝试从这里更深入。谢谢
标签: encoding utf-8 grep filenames