Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
“content”: “
ISO/IEC 14651:2026《信息技术 — 国际化字符串排序与比较方法》是由ISO和IEC共同制定的国际标准,定义了一种通用的字符串比较方法,旨在为不同语言、文化环境下的文本数据提供一致且可预测的排序顺序。该标准规范了一个参考排序规则(称为通用模板,Common Template),并提供了基于该模板进行本地化定制的机制。标准适用于任何需要对字符串进行排序的信息系统,包括数据库系统、操作系统文件管理、搜索引擎、电子表格、编程语言运行时以及网络通信协议中的字符串比较操作。
标准的适用范围涵盖多种字符编码(如UTF-8、UTF-16、GB 18030等),并明确支持Unicode字符集。通过定义多层次的比较权重,ISO/IEC 14651能够处理字母、数字、标点、变音符号、大小写等之间的差异,同时允许针对特定语言或使用场景调整排序规则。
ISO/IEC 14651 定义了一种多层次的比较模型。字符串被分解为一系列排序单元(grapheme clusters 或 character sequences),每个单元根据“通用模板”映射到一组权重(weights)。比较时按顺序逐一比较这些权重序列,权重较低的字符串被视为更小。标准规定了四个或更多权重级别,其中最常用的三个级别如下表所示:
| 级别 | 名称 | 典型差异示例 | 对顺序的影响 |
|---|---|---|---|
| 1 | 主要权重 (Primary) | a vs b, 0 vs 1 | 基本字母或数字差异,决定主要顺序 |
| 2 | 次要权重 (Secondary) | a vs ä, e vs é | 变音符号、笔画差异,不影响主顺序 |
| 3 | 第三权重 (Tertiary) | a vs A, 片假名 vs 平假名 | 大小写、文字体系差异 |
| 4 | 第四权重 (Quaternary) | 字母前后空格或标点 | 控制标点、空格等细微顺序 |
标准要求所有实现必须支持至少前三个权重级别,并允许通过定制模板增加或调整更高级别的行为。在比较过程中,先比较主要权重;如果相等,再比较次要权重;以此类推。
标准的核心是一个称为“通用可定制排序模板”(Common Template Tailorable Ordering,CTTO)的参考表。该表定义了Unicode中每个字符的默认权重分配(包括各级别权重值和压缩规则)。实现者可以直接使用该模板获得适用于大多数西欧语言的排序;对于需要特殊排序的语言(如瑞典、法语、中文),可以通过修改模板中的条目来得到本地化排序规则,而无需重新设计比较算法。模板采用表格形式列出字符序列及其对应的权重,并支持以下操作:
ISO/IEC 14651 提供了两种实现方式:直接比较字符流(逐权重比较)或先生成排序键(Sort Key)再比较排序键。排序键的生成是将字符串的所有权重按级别串联起来,并可能在每个级别后添加分隔符。生成排序键的方法在标准中有明确规范,确保相同字符串在不同实现中产生相同的排序键。实际应用中,预计算排序键并存储可以显著提升排序性能,尤其在数据集较大或需要多次比较的情况下。
// 伪代码示例:生成排序键 function generateSortKey(str, templates): weights = [] for each character in str: primary, secondary, tertiary = getWeights(templates, char) weights.append(primary, secondary, tertiary) sortKey = compress(weights) return sortKey
实现时应当注意排序键的压缩策略。标准允许压缩重复权重的连续序列(例如主权重序列中连续的相同值可压缩为一个),从而减小键长度。此外,对于仅需要简单比较的场景(如等值检测或少数比较),直接使用流式比较可能更高效,避免生成完整排序键的开销。
标准并不强制所有实现直接使用通用模板,而是鼓励为不同语言环境定制。例如:法语对变音符号的次要权重有特殊要求(如côte 和 coté 的顺序);瑞典语中ä和ö被视为独立字母而非变体;中国国家标准GB/T 18258(以及基于该标准的扩展)定义了中文拼音排序。在实施时,建议使用Unified Collation (CLDR) 中公开发布的定制规则,这些规则已经被广泛测试且符合各地语言习惯。
ISO/IEC 14651:2026 与以下标准或规范有密切联系:
在系统设计时,明确区分这些标准的关系有助于选择合适的实现路径。例如,如果只需要简单的英语排序,直接使用通用模板即可;若需支持多语种,最好采用CLDR/ICU等整合了ISO/IEC 14651和UCA实现的成熟库。