影响字母排序的不可见 Unicode 字符

Posted

技术标签:

【中文标题】影响字母排序的不可见 Unicode 字符【英文标题】:Invisible Unicode character that affects alphabetical sorting 【发布时间】:2021-12-18 01:55:48 【问题描述】:

是否存在影响列表条目的字母排序的不可见 (Unicode) 字符?

here 之前已经解决了不可见字符的一般问题,here 是一个不可见字符列表,其中大部分似乎是某种空白。

我正在寻找一个可以放置的隐形字符,例如在文件名的开头或内部,然后使该文件相对于其他文件名按字母顺序排列在顶部。

我应该补充一点,我要查找的字符也应该排在普通 SPACE 字符之前,例如,当用于在浏览器中的 Sharepoint、Teams 和 OneDrive 等位置排序的文件名时。

【问题讨论】:

什么是“字母排序”?没有一种真正的排序,所以它取决于您使用的算法(可能还取决于您正在处理的语言:字母排序严格取决于语言,也取决于拉丁脚本的语言)。 【参考方案1】:

U+0020 SPACE (" ") 是不可见的,并且在大多数排序中排在所有可见字符之前。几十年来,它一直被用来对列表的开头进行排序。

【讨论】:

谢谢。考虑到这一点,我实际上应该补充一点,我正在寻找的字符也应该排在正常的 SPACE 之前。 U+001F(美国)一般在 U+0020 之前下单。还有 U+001E (RS)、U+001D (GS),直至 U+0000 (NUL)。它们中的大多数也是零宽度。您可能希望避免使用 CR、LF 和 BS,因为它们经常移动光标,并且某些算法可能会遇到 NUL 问题(即使它是合法字符)。使用 ASCII 排序,字符按其数值排序。 请注意,如果您特别需要 Window Explorer,则需要针对 Windows Explorer 进行测试。不能保证所有系统都会按照您想象的方式排序,因为它不符合任何语言或文化。你只想要一个让特定软件以某种方式运行的 hack。我预计低值 ASCII 代码点的排序会低于 Windows 资源管理器中的其他代码点,但在这一点上,您超出了任何规范。但如果你想要 Unicode 的“规则”,它们就在这里:unicode.org/reports/tr10/#Collation_And_Code_Chart_Order (没有任何保证 Windows 资源管理器会仔细遵循 Unicode 排序算法排序顺序。但它可能适用于 ASCII。) 谢谢大家。我应该补充一点,这实际上是关于 Sharepoint 中的文件列表,而不是 Windows 资源管理器。我尝试了 Rob 的 U+001F、U+0020、U+001E、U+001D 和 U+0000,但它们似乎都显示为如下所示的可见方块: 并且似乎没有改变排序顺序。跨度>

以上是关于影响字母排序的不可见 Unicode 字符的主要内容,如果未能解决你的问题,请参考以下文章

如何比较包含非英文字符的 unicode 字符串以按字母顺序排序?

unicode排序规则,汉字怎么区分大小写,区分重音,区分假名,区分宽度

JS中sort()方法原理及使用

在table中的前端排序

深入理解苹果系统(Unicode)字符串的排序方法

深入理解苹果系统(Unicode)字符串的排序方法