S2.08.3Collation strength设计研究

大小写与变音符号影响排序结果

别名: 排序强度 · 大小写排序 · 变音符号排序 · accent-sensitive collation

概念解释

排序强度(collation strength)决定字符串比较要看到多细的差异。Unicode Collation Algorithm 通常先比较 primary weight,再比较 secondary、tertiary,以及必要时更高层级;在许多拉丁文字 tailoring 中,基本字母差异位于主要层,重音等变音符号位于次要层,大小写位于第三层。但层级含义会被语言 tailoring 和参数改变,不能把“一级永远忽略变音、三级永远比较大小写”写成跨语言定律。排序强度是比较策略,不是把原文转成小写或永久删除附加符号。

机制

分层权重让系统先形成读者感知上的大组,再用较细差异稳定组内次序。例如在适用的配置中,基础字母先决定位置,accent 再拆分同一基础字母的变体,case 最后拆分大小写;某些语言却把带变音字母视为独立主要字母,法语等 tailoring 还可能采用反向比较次要权重。CLDR 允许设置 strength,也提供 case level、case first、alternate handling 等参数,因此同一强度在不同配置下未必产生相同结果。显示排序可以保留细差异形成确定顺序;宽松搜索可能在较低强度匹配;账号名唯一性、数据库键和安全敏感比较则需要另行定义的规范化与精确比较,不能靠“忽略大小写/重音”的 collator 决定身份。

怎么研究

先构造最小成对样本,分别只改变基础字母、变音、大小写、标点和规范等价编码,再观察各 strength 与 locale 下的等价类和顺序;这比只检查一张最终列表更容易定位错误层级。对搜索任务,分别测精确输入、缺少变音符号的输入和错误大小写,记录召回、误命中、歧义候选及用户修正成本。对显示列表,测试强度变化是否使大量名称比较相等,并检查所用稳定 tie-breaker。方法报告必须给出 locale、collation type、strength、case/alternate 选项、规范化策略和库版本,否则“大小写不敏感”无法复现。

边界

weight 层级是特定 collation 的语义,不是 Unicode 字符类别的直接镜像。变音符号在一种语言中可能只是次要差异,在另一种语言中却形成独立字母;大小写规则还可能受脚本、位置和 locale 影响。UCA 要求规范等价序列比较相等,实现可通过 canonical normalization 或等效机制保证这一点;compatibility characters、标点、数字和 emoji 则需要其他选项。低强度比较会扩大等价类,适合某些发现任务,却可能把用户认为不同的词混在一起;高强度也不自动满足登录标识、域名、文件路径或密码的安全语义。

怎么落地

  • 先按任务分开配置:显示排序选择符合语言习惯且能稳定排列的 collator,搜索匹配选择可解释的宽松程度,唯一性与身份比较使用业务定义的精确规范化和稳定 ID。
  • 显式设置 locale、collation type、strength、case level、case first 与标点处理;不要通过统一 lowercase 或去除所有 combining marks 模拟语言敏感比较,因为这会改写数据并产生错误等价。
  • 当所选强度把多个字符串判为相等时,用更高强度或稳定记录 ID 完成显示排序;分页和缓存必须复用同一比较链,避免同组记录跨页漂移。
  • 用当地语言审阅大小写与变音最小对、规范等价编码和真实专名。分别验证显示次序、搜索召回与唯一性冲突,不用一个“排序测试通过”替代三种验证。

延伸

  • 同组S2.08.1 字母顺序随语言不同 · S2.08.2 中文可按拼音、笔画或部首排序 · S2.08.4 索引导航需随语言切换
  • 相邻S2.05.5 字符集限制会拒绝合法姓名 · S2.09.1 正则校验通常隐含单一地区假设
  • 站内检索collation strength · secondary weight accents · tertiary weight case

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/S2.08.3