Xiè*_*léi 7 unicode ordering sorting utf-8
我发现 ASCII 中的排序结果:
源文件test:
1-
11-
1-a
11-a
Run Code Online (Sandbox Code Playgroud)
使用 ASCII 排序:
$ LANG=en_US.ascii sort test
1-
1-a
11-
11-a
Run Code Online (Sandbox Code Playgroud)
并使用 UTF-8:
$ LANG=en_US.utf8 sort test
1-
11-
11-a
1-a
Run Code Online (Sandbox Code Playgroud)
我觉得这太违反直觉了,而且不是字典顺序。
字符 '-' ( 002d) 不是总是小于[0-9]( 0030-0039) 吗?UTF-8 整理的一般规则是什么?
以及如何绕过它,在 Linux中使UTF-8 的其他字符保持不变,而只需-减少然后[0-9]呢?(因此,它可以影响的结果ls --sort,sort等等)
在第一遍中会忽略减号。所以第一遍对1, 11, 1a, 进行排序11a。由于1< a,你得到11a< 1a,因此11-a< 1-a。
-是一个可变的整理元素,这意味着您/实现者可以选择忽略它。glibc 实现显然是这样做的。在实践中,大多数标点符号都会受到这种行为的影响。
您可以阅读Unicode Collation Algorithm 中的血腥细节,以glibc 如何实现为模。