摘要
- RFC 3536 把协议承载的编码八位字节、抽象字符、文字体系、语言,以及渲染器选择的字形区分开来;上一层的成功不能自动成为下一层的证据。
- 这份 2003 年的术语表属于信息性文件,明确表示自身不具规范性且并不完整,并在 2011 年被 RFC 6365 取代;它留下的纪律是:可读的形状只证明一次呈现,不证明语言或含义。
设想一张跨境物流面单。收件人的姓名在仓库屏幕上没有乱码,笔画清楚,宽度也正好,于是系统把“国际化”标成绿色。可同一个画面,既可能来自正确的 UTF-8,也可能来自错误字符集碰巧映出的相似字形;可能保留了作者输入,也可能经过未记录的规范化和字体回退。仓库看到的是一个结果,不是这段文本的履历。
RFC 3536 于 2003 年 5 月发布,题为《IETF 国际化所用术语》。它不是编码标准,也不是互操作配置,而是一份信息性术语表。作者之所以编写它,是因为工程讨论正在用相近词语指代不同层次。他们没有掩饰边界:定义不具规范性,条目并不完备,一些概念仍有分歧,尤其是“语言”。当前冻结的 RFC Editor 勘误页没有列出勘误;没有勘误并不等于这套词汇已经穷尽争议。
网络最先交付的是比特和八位字节。字符集说明如何把八位字节解释为抽象字符;RFC 3536 将它描述为编码字符集与字符编码方案的组合,并要求使用 IANA 登记名称。RFC 3629 所描述的 UTF-8 解决的正是这种编码与解码。字符集标签并不会告诉接收端文本属于中文、阿拉伯语还是法语,也不会证明语法正确或意思清楚。
字符本身也不是屏幕上的图。抽象字符由名称和属性识别,不由某一种固定外观识别;字形则是渲染后的形式。字体、上下文、塑形规则与回退机制共同决定最终形状。一个字符可以有多个字形,不同字符序列也可能呈现得几乎相同。因而“我看见了熟悉的形状”无法逆推出“这些就是原始八位字节”。
文字体系与语言之间同样不是一对一关系。一个书写系统可以服务多种语言,一种语言也可以使用多种文字体系。脚本识别能帮助选择塑形规则,却不能替代语言声明。RFC 3066 以及后来更完整的 RFC 5646 为语言标签建立框架;标签是另一份元数据。即使标签语法正确,它仍可能由机器猜测、粒度过粗或标注错误,无法证明文章自然,更不能证明读者理解。
RFC 2277 早已把目标放在人身上:协议本身没有自然语言,协议中的文本字符串却要交给人使用。因此,接受非 ASCII 字节不等于完成国际化。输入、保存、比较、搜索、排序、视觉显示、语音合成、触觉输出以及最终的可理解性,都是后续的独立步骤。
规范化把“看起来一样”的局限暴露得最明显。Unicode 允许不同码点序列构成规范等价文本;Unicode 标准附录 #15 定义多种规范化形式,RFC 5198 后来又给出网络交换文本的准备格式。RFC 3536 强调的是责任位置:协议必须说明规范化在哪里发生。若入口、数据库与比较器各自暗中处理,外观相同的字符串可能成为不同键值,不同记录也可能在没有审计轨迹时被合并。
这里不重复既有 RFC 5137 文章的边界。RFC 5137 那一篇讨论 Unicode 转义如何进入码点、规范化标识符又如何制造账户歧义。本篇拥有的是更宽的表示链:八位字节如何成为字符,字符如何获得文字体系和语言上下文,渲染器又如何选出字形。标识符策略只是这条链的一种应用。
排序也能检验层次是否被混淆。校对次序依赖具体语言和文化约定,通常不能用码点数字顺序替代。即使使用相同文字体系,不同语言群体也可能期待不同索引顺序。数据库可以毫无错误地完成一次确定性排序,却给人呈现错误的目录。“查询成功”不是“语言顺序正确”的收据。
双向文本还会分离内存顺序与显示顺序。一张截图未必能还原源序列,光标移动、复制粘贴或屏幕阅读器可能暴露画面隐藏的结构。渲染也不限于视觉:RFC 3536 把听觉和触觉呈现都包括在内。屏幕字形正确时,发音仍可能错误,盲文输出也可能不可用。
文件的历史地位必须写准。RFC 3536 从来不是 Internet Standard。2011 年 9 月,经过 IETF 共识和公开评审的 RFC 6365 以 BCP 166 发布,并明确取代 RFC 3536。RFC 7997 后来又改变了 RFC 文档本身使用非 ASCII 字符的政策。这些演进说明术语和出版实践继续成熟,却不会把 2003 年的每个定义追认成规范。
RFC 3536 的安全章节只说“本文不讨论安全”。这句话不能被后人扩写成一套原文不存在的威胁模型。今天的运营者当然可以研究编码、方向和相似呈现带来的风险,但可靠的历史结论应当更窄:当系统把编码数据、抽象文本、语言语境和呈现结果压成一个状态时,可审计性就会消失。
完整证据链应当保留原始八位字节与字符集标签,记录解码结果,验证字符序列,注明规范化形式及执行位置,保存语言标签及来源,识别文字体系和方向片段,记录塑形引擎、请求字体和实际回退字体,检查视觉、听觉与触觉输出,声明排序规则,最后由目标受众验证能否理解。发光的字形只关闭其中一环。
来源
- RFC 3536 — HTML
- RFC 3536 — 纯文本
- RFC Editor 信息页
- IETF Datatracker 记录
- IETF Datatracker 历史
- RFC 3536 勘误
- RFC 2277 — 字符集与语言政策
- RFC 3066 — 语言标签
- RFC 5646 — 现行语言标签框架
- RFC 3629 — UTF-8
- RFC 5198 — 网络交换 Unicode 格式
- RFC 6365 — 术语与 BCP 166
- RFC 7997 — RFC 中的非 ASCII 字符
- IANA 字符集登记表
- Unicode 标准附录 #15
- W3C 字符模型
- Heng Lu — Running Code Is Primary
- Heng Lu — On Reality Layers
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
