首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gnu排序UTF-8排序顺序不正确

Gnu排序UTF-8排序顺序不正确
EN

Stack Overflow用户
提问于 2017-01-16 07:50:22
回答 1查看 214关注 0票数 1

我在Linux上对一个UTF-8文件使用GNU排序,但有些字符串排序不正确。我在BASH中将LC_COLLATE变量设置为en_US.UTF-8。这是一个十六进制转储,显示了这个问题。

代码语言:javascript
复制
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核心实用程序,它应该是坚如磐石的。你知道为什么会发生这种情况吗?为什么我必须使用十六进制转储来跟踪这个问题;现在已经是21世纪了!

EN

回答 1

Stack Overflow用户

发布于 2020-09-29 02:42:02

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

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

不幸的是,这失去了UTF-8排序的许多有用的方面,比如将重音字符放在它们的基本字符旁边。但它远没有libc开发人员和Unicode联盟所做的可怕的混乱那么令人反感。他们无法理解排序的目的、连接字符串时保持排序顺序的必要性、始终产生相同顺序的必要性,以及世界上几乎每个程序如何依赖于此。相反,他们似乎觉得对拼写错误进行“排序”很重要,比如通过忽略名称中间插入的空格(!)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41667652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档