Gnu排序UTF-8不正确的整理顺序

时间:2017-01-15 23:50:22

标签: utf-8 gnu-sort

我在Linux上使用GNU排序来获取UTF-8文件,并且某些字符串未正确排序。我在BASH中将LC_COLLATE变量设置为en_US.UTF-8。这是一个显示问题的十六进制转储。

5f ef ac 82 0a
5f ef ac 81 0a
5f ef ac 82 0a
5f ef ac 82 0a

这是四个连续排序的行。 0a是行尾。第四个字节的顺序不正确。字节值81不应该在82个值字节之间。当在终端窗口中显示时,第二行是与其他三行不同的字符。

我怀疑这是sort命令的问题,因为它是一个GNU核心实用程序,它应该坚如磐石。任何想法为什么会发生这种情况?为什么我必须使用hexdump来追踪这个问题;它已经是21世纪了!

1 个答案:

答案 0 :(得分:0)

使用LC_COLLATE = C似乎是唯一的解决方案。

您可以通过编辑/ etc / default / locale来设置所有内容

不幸的是,这丢失了UTF-8排序的许多有用方面,例如将重音字符放在其基本字符旁边。但是,它远没有libc开发人员和Unicode联合体所造成的彻底的混乱。他们无法理解排序的目的,连接字符串时保持排序顺序的需求,始终产生相同顺序的需求以及世界上几乎每个程序如何依赖于此。取而代之的是,他们似乎认为对“错字”进行“排序”很重要,例如通过忽略它们(!)来插入名称中间的空格。