【发布时间】:2012-12-27 17:56:35
【问题描述】:
我有一个文件,每行有两个字符:
$ cat roman
Ⅱ
Ⅲ
当我用sort -u对该文件进行排序时,只显示一行:
$ sort -u roman
Ⅱ
Ⅱ 是代码点 U+2161,Ⅲ 是代码点 U+2162。为什么只显示一行?
编辑
$ xxd -g 1 roman
0000000: e2 85 a1 0a e2 85 a2 0a ........
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
我的sort 属于 GNU coreutils。
$ sort --version
sort (GNU coreutils) 8.15
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and Paul Eggert.
【问题讨论】:
-
您能否提供文件的 hexdump,并转储您的语言环境和排序规则相关的环境变量?
-
那么,解决办法是什么?
-
@UniMouS - 这是哪个版本的排序? BSD排序? GNU 排序?还有什么?
-
@UniMouS, LC_COLLATE,你已经包括在内,是主要的。 unix.stackexchange.com/questions/35469/… 解释了 UTF-8 排序如何忽略一些代码点,但我不知道为什么它会忽略数字(字母)类别中的代码点。
标签: linux sorting unicode gnu-coreutils