Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
纯字母排序法(was:Emacs中奇怪的文件排序与我的语言环境有关)_Emacs_Collation_Locale - Fatal编程技术网

纯字母排序法(was:Emacs中奇怪的文件排序与我的语言环境有关)

纯字母排序法(was:Emacs中奇怪的文件排序与我的语言环境有关),emacs,collation,locale,Emacs,Collation,Locale,我刚注意到。这真令人毛骨悚然。但这是我的截图。所以也许帮帮我吧 TL;博士 问题在下面 症状 (这是一个emacs-nw屏幕截图。是的,我的终端有6行高。这使屏幕截图更切题。语言环境是法语,这是意料之中的。它与英语没有什么不同,只要想象一下有一个“may”而不是«mai»,月份被大写并截断为三个字符) 如果您错过了它,它是dired模式,文件应该按名称排序(在modeline中这样说),但是array.c和array.h不在一起 恐慌 我在找array.c,光标在下面,哇,伙计,它在哪里?一分

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

TL;博士 问题在下面

症状

(这是一个
emacs-nw
屏幕截图。是的,我的终端有6行高。这使屏幕截图更切题。语言环境是法语,这是意料之中的。它与英语没有什么不同,只要想象一下有一个“may”而不是«mai»,月份被大写并截断为三个字符)

如果您错过了它,它是
dired
模式,文件应该按名称排序(在modeline中这样说),但是
array.c
array.h
不在一起

恐慌 我在找
array.c
,光标在下面,哇,伙计,它在哪里?一分钟前它就在那里。然后我真的找到了。然后我检查模型线。如果我这么要求,我就去。然后我注意到它是用法语写的,他们再也听不懂了。用
LC_ALL=C
拍摄一个新的屏幕截图

但这解决了问题

(是的,确实发生了。)

所以这是一个地区的事情 我的语言环境是
fr\u 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      
(这时我去掉了标签,开始怀疑是否有人真的认真遵守了)

看来这是正常的 我不想再进行神秘的shell调用了,但要点是:在我安装的29个语言环境中,除了三个以外,其他所有语言环境都使用“奇怪”的顺序。这三个是:C,C.UTF-8和POSIX

不用说,但提到它也没什么坏处:“奇怪”的顺序让我感到不安,但它有其自身的意义:在这个小样本集上,它像往常一样按字典顺序排序,只是忽略了句号。所以
arrayc
arrayf
arrayh

问题: 为什么??为什么?为什么?除了C之外,其他语言环境都有,所以这是经过深思熟虑的。这是基于什么规则?某个委员会中是否有人竖立并宣判:“整理时不应遵守标点符号”?可能有一些合法的严肃文件,他们说这是完全正常的,这就是为什么,对吗

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

当然,它也忽略了空间

奖励:这是gnu.org上的bash-4.3.30 tarball。为什么有些文件是0664,有些文件是0644?在评论中保留答案

另外:我不是在问如何修复它。如果你没有注意到,我已经修好了,其实不需要修好。此外,这在任何地方都有重复。我要问的是原因。

答案:Unicode联盟得出结论,不管“变量”字符如何,保证排序顺序比包含字符串中的每个字符更重要

详细信息:我相信你要寻找的答案在于:

如果我理解正确,标点符号(除其他外,如空格)在不同语言中是“可变的”,因此为了确保不同语言之间的排序顺序相同,“可变”字符在排序中的“权重”非常低;经常将权重解析为零,因此对排序没有任何影响

UTS确实表明可以根据用户自定义排序

不幸的是,大多数系统只是使用默认值,这导致只有少数排序规则定义赋予“变量”字符同等的权重;而且没有真正支持用户调整默认值,从而获得包含标点和空格的UTF-8排序,而不是排除

< >如果我正确地遵循理性,考虑分类名称。在许多文化和语言中,firstname总是在lastname之前给出,如果颠倒过来,则lastname通过标点符号与firstname分开。在其他文化中,情况正好相反

lastname, firstname
lastname firstname

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

(在emacs init文件中设置env“LC\u COLLATE”“C”)
?还是不知道为什么会这样分类,尽管。。。
lastname, firstname
lastname firstname
firstname lastname
firstname, lastname