仅限字母的排序规则(是:Emacs中的奇怪文件排序与我的语言环境一致)

时间:2015-09-15 23:37:12

标签: locale collation

我刚注意到。这令人毛骨悚然。但这是我的截图。所以请帮帮我吧!

TL; DR

问题在底部。

症状

  -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.carray.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      

(当我删除代码并开始怀疑是否有人真正认真对待

似乎是常态

我将免除你的奥术贝壳调用,但它的要点是:我在这里安装的29个语言环境中,除了三个以外都使用了“怪异”的命令。这三个是:C,C.UTF-8和POSIX。

毋庸置疑,但无论如何都提到它是没有害处的:“奇怪的”排序让我感到不安,但它以自己的方式有意义:在这个小样本集上,它像往常一样按字典顺序排序,只忽略了句号。所以arrayc< arrayf< arrayh

问题

为什么呢?为什么? 为什么??? 它在每个区域设置中都是C,所以这是故意的。这基于什么规则?某个委员会中有人竖立并定罪:“在整理时你不能观察你的标点符号”?可能有一些合法的严肃文件,他们说这是完全正常的,这就是原因,对吧?

这是我多年来第一次注意到这一点。

当然,它也会忽略空格。

加分:这是来自gnu.org的bash-4.3.30 tarball。为什么有些文件0664和其他0644?在评论中保留答案。
另外:我不是在问如何修复它。如果您没有注意到,我已经修复并不需要修复它。此外,这到处都是骗局。我问的是为什么。

1 个答案:

答案 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

为确保每个列表始终按相同顺序排序,标点符号将被忽略。