4月阅读周·HTTP权威指南:国际化之多语言字符编码入门篇

测试智商的网站 2周前 (08-23) 阅读数 4161 #性能测试

引言

HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。

《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。

这本书主要包括以下内容:

  • 第一部分描述了Web的基础构件与HTTP的核心技术
  • 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
  • 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
  • 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
  • 第五部分介绍了发布和传播Web内容的技巧。
  • 第六部分是一些很有用的参考附录,以及相关技术的教程。

国际化

每天有上亿的人用数百种语言写着各种文档。为了真正实现万维网的目标,HTTP要能够传输和处理用多种语言和字母表编写的国际性文档。

网站国际化方面的两个主要问题:字符集编码(character set encoding)和语言标记(language tag)。HTTP应用程序使用字符集编码请求和显示不同字母表中的文本,它们使用语言标记根据用户所理解的语言来说明并限制内容。

多语言字符编码入门

字符集术语

以下是应当了解的电子化字符系统的8个术语。

字符:字符是指字母、数字、标点、表意文字(比如汉语)、符号,或其他文本形式的书写“原子”。由统一字符集(Universal Character Set, UCS,它的非正式的名字是Unicode)首创,为多种语言中的很多字符开发了一系列标准化的文本名称,它们常用来便捷地命名字符,而且不会与其他字符冲突。

字形:描述字符的笔画图案或唯一的图形化形状。如果一个字符有多种不同的写法,就有多个字形。

4月阅读周·HTTP权威指南:国际化之多语言字符编码入门篇

  • 编码后的字符:分配给字符的唯一数字编号,这样我们就可以操作它了。
  • 代码空间:计划用于字符代码值的整数范围。
  • 代码宽度:每个(固定大小的)字符代码所用的位数。
  • 字符库:特定的工作字符集(全体字符的一个子集)。
  • 编码后的字符集:组成字符库(从全球的字符中选出若干字符)的已编码字符集,并为每个字符分配代码空间中的一个代码。换句话说,它把数字化的字符代码映射为实际的字符。
  • 字符编码方案:把数字化的字符代码编码成一系列二进制码(并能相应地反向解码)的算法。字符编码方案可用来减少识别字符所需要的数据总量(压缩)、解决传输限制、统一重叠编码字符集。

字符集的命名很糟糕

从技术上说,MIME中的charset标记(用在Content-Type首部的charset参数中和Accept-Charset首部中)描述的压根就不是字符集。MIME中的charset值所命名的是把数据位映射为唯一的字符的一整套算法。它是字符编码方案(character encoding scheme)和编码后的字符集(coded character set)这两种概念的组合。

因为关于字符编码方案和编码后的字符集方面的标准都已经发布过了,所以,这个术语的使用是很草率的,很容易引起混淆。

术语“字符集”在本文档中是指一种方法,它可以把一系列8位字节转换为一系列字符。注意:术语“字符集”经常被称为“字符编码”。但由于HTTP和MIME共享同样的注册信息,术语也能共享是很重要的。

IETF在RFC 2277中也采用了非标准的术语。

本文档中使用术语“字符集”来表示一组把一系列8位字节转换为一系列字符的规则的集合,比如编码后的字符集与字符编码方案的组合。这与MIME的“charset=”参数中标识符的用法相同,并且已在IANA的字符集注册表中注册。(注意这不是在其他标准主体,比如在国际标准化组织ISO中使用的术语)。因此,在阅读标准文档的时候,要保持清醒,这样才能确切地知道它所定义的到底是什么。现在我们已经将相关的术语介绍完了,接下来更仔细地研究一下字符、字形、字符集以及字符编码。

字符

字符是书写的最基本的构建单元。字符可以表示字母、数字、标点、表意符号(比如在汉语中)、数学符号,或其他书写的基本单元。

字符和字体以及风格无关。同一个字符(UCS中的命名是LATIN SMALL LETTER A)的若干变体。尽管它们的笔画图案和风格有很大的不同,但母语是西欧语言的读者都能立刻辨认出这5个形状是同一个字符。

在很多书面语体系中,根据一个字符在单词中位置的不同,同一个字符也会有不同的笔画形状。

字符编码方案

字符编码方案规定如何把字符的代码数字打包装入内容比特,以及在另一端如何将其解包回字符代码(参见图16-7)。字符编码方案有以下3种主要类型。

  • 固定宽度:固定宽度方式的编码用固定数量的比特表示每个编码后的字符。它们能被快速处理,但可能会浪费空间。
  • 可变宽度(无模态):可变宽度方式的编码对不同的字符代码数字采用不同数量的比特。对于常用字符,这样可以减少需要的位数,而且还能在允许使用多字节来表示国际性字符的同时,保持对传统8位字符集的兼容性。
  • 可变宽度(有模态):有模态的编码使用特殊的“转义”模式在不同的模态之间切换。例如,可以用有模态的编码在文本中使用多个互相有重叠的字符集。有模态的编码处理起来比较复杂,但它们可以有效地支持复杂的书写系统。

总结

对于工作中要开发大量国际化应用的HTTP程序员来说,为了能理解技术规范和相应的实现软件,需要深入地理解多语言字符系统。由于术语很复杂且不一致,学习多语言字符系统不太容易。常常需要阅读标准文档,而且我们可能对工作涉及的那些语言还不太熟悉。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞 | 收藏️ | 留言

  • 随机文章
  • 热门文章
  • 热评文章
热门