我刚注意到。这令人毛骨悚然。但这是我的截图。所以请帮帮我吧!
问题在底部。
-rw-r--r-- 1 jb jb 24287 mars 21 2012 array.c
-rw-r--r-- 1 jb jb 28767 oct. 1 2014 arrayfunc.c
-rw-r--r-- 1 jb jb 2895 mai 11 2012 arrayfunc.h
-rw-rw-r-- 1 jb jb 4030 mars 29 2009 array.h
-UUU:%%--F1 bash-4.3.30 6% L9 (Dired by name)---------------------
(这是一个emacs -nw
屏幕截图。是的,我的终端是6行高。它使屏幕截图更加重要。语言环境是法语,这是预期的。它与英语没有什么不同,想象一下,有一个“可能”而不是“mai”,月份是大写并截断为三个字符)
如果您错过了它,它是dired
模式,文件应该按名称排序(在模式行中这样说),但array.c
和array.h
不在一起!
我正在寻找array.c
,光标位于 whoa dude 之前,它就在那里。然后我真的找到了它。然后我检查模式。然后我去WTF我问。然后我注意到它是用法语,他们永远不会理解用LC_ALL=C
拍摄新截图。
但这解决了这个问题。
(是的,它真的发生了。)
我的区域设置为fr_FR.UTF-8
$ ls ar* | $ LC_ALL=C ls ar*
array.c | array.c
arrayfunc.c | array.h
arrayfunc.h | arrayfunc.c
array.h | arrayfunc.h
(当我删除emacs代码并开始怀疑是否有人真正认真对待collation时
我将免除你的奥术贝壳调用,但它的要点是:我在这里安装的29个语言环境中,除了三个以外都使用了“怪异”的命令。这三个是:C,C.UTF-8和POSIX。
毋庸置疑,但无论如何都提到它是没有害处的:“奇怪的”排序让我感到不安,但它以自己的方式有意义:在这个小样本集上,它像往常一样按字典顺序排序,只忽略了句号。所以arrayc
< arrayf
< arrayh
。
为什么呢?为什么? 为什么??? 它在每个区域设置中都是C,所以这是故意的。这基于什么规则?某个委员会中有人竖立并定罪:“在整理时你不能观察你的标点符号”?可能有一些合法的严肃文件,他们说这是完全正常的,这就是原因,对吧?
这是我多年来第一次注意到这一点。
当然,它也会忽略空格。
加分:这是来自gnu.org的bash-4.3.30 tarball。为什么有些文件0664和其他0644?在评论中保留答案。
另外:我不是在问如何修复它。如果您没有注意到,我已经修复并不需要修复它。此外,这到处都是骗局。我问的是为什么。
答案 0 :(得分:0)
答案:Unicode联盟得出结论:保证排序顺序,无论变量是什么'字符,比包含字符串中的每个字符更重要。
DETAILS :我相信您正在寻找的答案位于:
http://testng.org/doc/documentation-main.html
如果我正确理解它,标点符号(除了其他内容,如空白)是可变的'在语言之间,因此要确保跨语言的相同排序顺序,变量'人物的体重非常低'在排序;经常解析为零的重量,因此对排序没有任何影响。
UTS确实表明可以按用户自定义排序。
不幸的是,大多数系统只使用默认设置,这导致只有少数整理定义可以提供变量'人物等重;并且没有真正支持用户调整默认值,以便他们获得带标点符号的UTF-8排序和空格INCLUDED而不是EXCLUDED。
如果我正确地遵循理性,请考虑对名称进行排序。在许多文化和语言中,firstname总是在lastname之前给出,当反转时,lastname由第一个名称的标点符号分隔。在其他文化中,情况恰恰相反。
lastname, firstname
lastname firstname
和
firstname lastname
firstname, lastname
为确保每个列表始终按相同顺序排序,标点符号将被忽略。