求匹配指定字符串排序顺序的区域设置与排序规则
寻找匹配特定排序结果的区域设置/排序规则
目标升序排序结果
T. J. Smith
T. Smith
T.J. Smith
Talya
T'Amya
Tamya
已尝试的排序方式
- Windows 10(本地区域设置)排序结果不匹配
- Ubuntu Nautilus排序结果不匹配
- Ubuntu
sort工具:LC_COLLATE=C模式结果不匹配LC_COLLATE=en_US.UTF-8模式结果不匹配
排序规则特征分析
从目标排序的顺序可以拆解出核心逻辑:
- 点号(.)被忽略:
前三个字符串的排序符合「忽略点号后,按空格、字母的常规升序规则」:- 忽略点号后,
T. J. Smith变为T J Smith,T. Smith变为T Smith,T.J. Smith变为TJ Smith - 空格的排序权重低于字母,因此
T J Smith<T Smith<TJ Smith,完全匹配目标里前三项的顺序。
- 忽略点号后,
- 单引号(')不被忽略,作为次级区分项:
Talya<T'Amya<Tamya的顺序说明:- 优先比较纯字母序列:
Talya的字母链是T-a-l-y-a,T'Amya忽略单引号后是T-a-m-y-a,由于l的排序权重小于m,因此Talya排在T'Amya之前。 - 当纯字母序列完全相同时(
T'Amya忽略单引号后与Tamya一致),带有单引号的原字符串排在无单引号的字符串之前。
- 优先比较纯字母序列:
结论
这种排序方式更可能是云服务自定义的规则,而非标准系统区域设置。常见的标准区域设置(如en_US.UTF-8、C)要么会忽略单引号,要么按ASCII码点将T'Amya排在Talya之前,无法匹配目标顺序。
如果需要在本地模拟该规则,可以尝试:
- 预处理文件名:移除所有点号(.),保留空格和单引号。
- 按预处理后的字符串升序排序。
- 若预处理后字符串相同,原字符串包含单引号的排在前面。
内容的提问来源于stack exchange,提问作者julio
相关产品推荐
相关产品推荐

