排序跟编码没有关系,只跟Locale有关系,因为排序时比较的都是Unicode字符;只是sort.exe不支持utf-8,会乱码.
系统 "区域和语言"中可以修改 中文排序方式,按照 拼音 或 笔画
中文简体LocaleId是2052,在同样是2052的情况下,排序算法有可能不同.
Windows自带的.sort.exe跟powershell.exe的排序算法是一致的,中文排序是按拼音排序的,跟系统 "区域和语言"设置的 排序无关.- #
- $
- @
- _
- 0
- 1
- 2
- 3
- a
- b
- c
- d
- e
- f
- 啊a
- 吧b
- 从c
- 的d
- 额e
- 发f
复制代码 pwsh.exe排序与之不同,1.中文在英文字母前面;2.中文排序跟系统 "区域和语言" 设置的排序规则有关系.
按 拼音 排序- _
- @
- #
- $
- 0
- 1
- 2
- 3
- 啊a
- 吧b
- 从c
- 的d
- 额e
- 发f
- a
- b
- c
- d
- e
- f
复制代码 按 笔画 排序- _
- @
- #
- $
- 0
- 1
- 2
- 3
- 从c
- 发f
- 吧b
- 的d
- 啊a
- 额e
- a
- b
- c
- d
- e
- f
复制代码 通过比较发现,原来.NET Framework与.NET Core的排序版本不同,后者版本更高.
又发现浏览器JavaScript的string对象的方法localCompare(str2,?locale,?option)可以指定locale,当locale=='zh-cn'时,排序结果与.NET Core版本一致.这说明 Core版本的CompareInfo的版本是最新版. |