我遇到了一些奇怪的行为,我无法完全理解ls
中文文件名。我运行的是 macOS 13.6.1,启用了 SIP(无核心操作系统修改),安装了 MacPorts,并将美国英语作为主要语言。
首先,在空白文件夹中运行这个小脚本来创建一些测试文件:
import random
random.seed(42)
for i in range(30):
n = random.randrange(3, 8)
fn = "".join(random.choice("一二三") for _ in range(n))
open(fn, "w")
这使得 30 个文件以字符一二三(一、二、三)的随机组合命名。
接下来,我ls -l
在我的 Mac 上运行(根据手册页,版本为“macOS 13.5”):
% ls -l
total 8
-rw-r--r--@ 1 brx staff 164 Nov 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二三二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二一二二一
文件排序清晰按文件名长度,但否则未排序长度相同,就好像ls
所有的汉字都是完全等价的。
LANG
设置为en_US.UTF-8
(并且没有LC_*
设置变量),所以也许这只是英文排序的问题?
% LANG=zh_CN.utf-8 ls -l
total 8
-rw-r--r--@ 1 brx staff 164 11 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一一三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二一二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二二三二一二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二三二一二二一
是的,也许这只是Mac内置的ls
蹩脚;让我们尝试一下 GNU Coreutils(来自 MacPorts,ls (GNU coreutils) 9.4
):
% gls -l
total 4
-rw-r--r--+ 1 brx staff 164 Nov 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二三二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二一二二一
% LANG=zh_CN.utf-8 gls -l
总计 4
-rw-r--r--+ 1 brx staff 164 1125日 02:41 test.py
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一一三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二一二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二二三二一二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二三二一二二一
除了幽默地GNU Coreutils 的日期显示已损坏,没有任何变化。唯一似乎有用的是C.utf-8
:
% LANG=C.utf-8 ls -l
total 8
-rw-r--r--@ 1 brx staff 164 Nov 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ???????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ???????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ???????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
% LANG=C.utf-8 gls -l
total 4
-rw-r--r--+ 1 brx staff 164 Nov 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二一二二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二三二一二
这里发生了什么?我的 Mac 上的区域设置是否损坏?
编辑:澄清预期的行为:我希望ls
以任何合理的排序顺序对字符进行排序;一些合理的顺序是 Unicode 代码点(一、三、二)、数字或笔划数顺序(一、二、三)或拼音顺序(二、三、一,对应于“二、三、一”)。
回答评论的一些额外信息(在en_US.UTF-8
语言环境中):
sort
当通过管道传送到或gsort
有或没有 时,顺序保持不变-u
。实际上我的系统上没有 C.utf-8 语言环境,这解释了为什么我得到与 C 语言环境中相同的输出,按字节值排序,每个字节呈现为
?
.expr '一二三' '<' '三一二'
、expr '一二三' '>' '三一二'
、expr '一二三' = '三一二'
分别返回 1、0 和 0,无论是使用 macosexpr
还是 GNUexpr
。perl -MPOSIX -le 'print strcoll@ARGV' -- '一' '二'
输出-140
是否随perl
macos 或 MacPorts 一起提供。perl -MPOSIX -le 'print strcoll@ARGV' -- '一一' '二'
输出19968
这些字符的编码看起来
$'\344\270\200\344\270\200\344\270\211'
像区域设置中一一三
报告的那样,因此看起来它们已正确编码为 UTF-8。gls
C
的输出
perl -MPOSIX -le 'print unpack "H*", strxfrm$_ for @ARGV' -- '一' '一一' '二'
是:303034323030303030346c32 30303432303034323030303030346c3230346c32 303034323030303030346e3e
的输出
perl -MPOSIX -le 'print "$_\t" . unpack "H*", strxfrm$_ for <*>'
是一一三一 303034323030343230303432303034323030303030346c3230346c3230346c3b30346c32 一一三 3030343230303432303034323030303030346c3230346c3230346c3b 一三三二三一 3030343230303432303034323030343230303432303034323030303030346c3230346c3b30346c3b30346e3e30346c3b30346c32 一三二一一一一 303034323030343230303432303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c3230346c3230346c3230346c32 一三二一一一二 303034323030343230303432303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c3230346c3230346c3230346e3e 一三二一 303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c32 一三二三三三一 303034323030343230303432303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c3b30346c3b30346c3b30346c32 一三二三三 30303432303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c3b30346c3b 一三二 3030343230303432303034323030303030346c3230346c3b30346e3e 一二一一三三 3030343230303432303034323030343230303432303034323030303030346c3230346e3e30346c3230346c3230346c3b30346c3b 一二一三二三三 303034323030343230303432303034323030343230303432303034323030303030346c3230346e3e30346c3230346c3b30346e3e30346c3b30346c3b 一二三二一一 3030343230303432303034323030343230303432303034323030303030346c3230346e3e30346c3b30346e3e30346c3230346c32 三一一二二二三 303034323030343230303432303034323030343230303432303034323030303030346c3b30346c3230346c3230346e3e30346e3e30346e3e30346c3b 三一三一一 30303432303034323030343230303432303034323030303030346c3b30346c3230346c3b30346c3230346c32 三三一三 303034323030343230303432303034323030303030346c3b30346c3b30346c3230346c3b 三三一 3030343230303432303034323030303030346c3b30346c3b30346c32 三三三三 303034323030343230303432303034323030303030346c3b30346c3b30346c3b30346c3b 三二一三二 30303432303034323030343230303432303034323030303030346c3b30346e3e30346c3230346c3b30346e3e 三二三一 303034323030343230303432303034323030303030346c3b30346e3e30346c3b30346c32 三二二三 303034323030343230303432303034323030303030346c3b30346e3e30346e3e30346c3b 二一一一 303034323030343230303432303034323030303030346e3e30346c3230346c3230346c32 二一一三三二 3030343230303432303034323030343230303432303034323030303030346e3e30346c3230346c3230346c3b30346c3b30346e3e 二一三三 303034323030343230303432303034323030303030346e3e30346c3230346c3b30346c3b 二一二 3030343230303432303034323030303030346e3e30346c3230346e3e 二三三二三二二 303034323030343230303432303034323030343230303432303034323030303030346e3e30346c3b30346c3b30346e3e30346c3b30346e3e30346e3e 二三二一二二一 303034323030343230303432303034323030343230303432303034323030303030346e3e30346c3b30346e3e30346c3230346e3e30346e3e30346c32 二三二三二三 3030343230303432303034323030343230303432303034323030303030346e3e30346c3b30346e3e30346c3b30346e3e30346c3b 二二一一二一 3030343230303432303034323030343230303432303034323030303030346e3e30346e3e30346c3230346c3230346e3e30346c32 二二三二一二 3030343230303432303034323030343230303432303034323030303030346e3e30346e3e30346c3b30346e3e30346c3230346e3e test.py 303033563030333830303355303033563030314d303033523030335f30303030303033563030333830303355303033563030314d303033523030335f
答案1
您会注意到,在相同长度的字符串中,这些字符似乎存在相对顺序,因此它们并不完全被视为等效。它不像
答案2
我发现了 macOS 在 中存储区域设置文件的位置,/usr/share/locale
令我惊讶的是,这就是zh_CN.UTF-8
区域设置的定义方式:
% ls -la /usr/share/locale/zh_CN.UTF-8
total 8
drwxr-xr-x 8 root wheel 256 Oct 12 04:10 .
drwxr-xr-x 209 root wheel 6688 Oct 12 04:10 ..
lrwxr-xr-x 1 root wheel 28 Oct 12 04:10 LC_COLLATE -> ../la_LN.US-ASCII/LC_COLLATE
lrwxr-xr-x 1 root wheel 17 Oct 12 04:10 LC_CTYPE -> ../UTF-8/LC_CTYPE
drwxr-xr-x 3 root wheel 96 Oct 12 04:10 LC_MESSAGES
-r--r--r-- 2 root wheel 36 Oct 12 04:10 LC_MONETARY
lrwxr-xr-x 1 root wheel 25 Oct 12 04:10 LC_NUMERIC -> ../zh_CN.eucCN/LC_NUMERIC
-r--r--r-- 2 root wheel 408 Oct 12 04:10 LC_TIME
LC_COLLATE
符号链接到/usr/share/locale/la_LN.US-ASCII/LC_COLLATE
.该文件的大小刚刚超过 2KB,虽然它是一个二进制文件(而不是某些其他系统使用的文本格式),但它非常清楚地定义了仅 256 字节的排序规则:
% xxd /usr/share/locale/la_LN.US-ASCII/LC_COLLATE
00000000: 312e 3141 0a00 0000 0000 0101 0102 0000 1.1A............
00000010: 0102 ffff fefe 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0002 0000 0002 0000 ................
00000030: 0003 0000 0003 0000 0004 0000 0004 0000 ................
00000040: 0005 0000 0005 0000 0006 0000 0006 0000 ................
00000050: 0007 0000 0007 0000 0008 0000 0008 0000 ................
00000060: 0009 0000 0009 0000 000a 0000 000a 0000 ................
00000070: 000b 0000 000b 0000 000c 0000 000c 0000 ................
00000080: 000d 0000 000d 0000 000e 0000 000e 0000 ................
00000090: 000f 0000 000f 0000 0010 0000 0010 0000 ................
...
00000760: 00e9 0000 00e9 0000 00ea 0000 00ea 0000 ................
00000770: 00eb 0000 00eb 0000 00ec 0000 00ec 0000 ................
00000780: 00ed 0000 00ed 0000 00ee 0000 00ee 0000 ................
00000790: 00ef 0000 00ef 0000 00f0 0000 00f0 0000 ................
000007a0: 00f1 0000 00f1 0000 00f2 0000 00f2 0000 ................
000007b0: 00f3 0000 00f3 0000 00f4 0000 00f4 0000 ................
000007c0: 00f5 0000 00f5 0000 00f6 0000 00f6 0000 ................
000007d0: 00f7 0000 00f7 0000 00f8 0000 00f8 0000 ................
000007e0: 00f9 0000 00f9 0000 00fa 0000 00fa 0000 ................
000007f0: 00fb 0000 00fb 0000 00fc 0000 00fc 0000 ................
00000800: 00fd 0000 00fd 0000 00fe 0000 00fe 0000 ................
00000810: 00ff 0000 00ff 0000 0100 0000 0100 0000 ................
00000820: 0101 0000 0101 ......
因此,问题似乎在于 macOS 根本没有为任何中文字符(或者实际上是前 256 个代码点之外的任何字符)定义排序规则,即使在中文语言环境中也是如此。