本章主要讲解了http协议在传输的过程中,如何彼此理解对方发送的内容是采用什么字符集编写的,从而彼此能够进行正确的显示内容!由此介绍了相关的报文首部。
HTTP对国际性内容的支持
服务器通过HTTP协议的Content-Type首部中的charset参数和Content-Language首部告知客户端文档的字母表和语言。
字符集和HTTP
字符集是把字符转换为二进制码的编码,字符集标记在由IANA维护的MIME字符集注册机构进行了标准化。下面的Content-Type首部告知接收者,传输的内容是一份HTML文件,用charset参数告知接收者使用iso-8859-6阿拉伯字符集的解码算法把内容中的二进制码转换为字符:Content-Type: text/html; charset=iso-8859-6
把二进制码转换为字符要经过两个步骤:
- 文档中的二进制码被转换成字符代码,它表示了特定编码字符集中某个特定编号的字符。
- 字符代码用于从编码的字符集中选取特定的元素。如在iso-8859-6中,值255对应阿拉伯字母“FEH”。
不同的字符集相同的字符代码其字符不一定相同:如获得字符代码是225,那么字符集iso-8859-1和字符集iso-8859-2所代表的字符就不一样。
Content-Type首部和Charset首部以及META标志
如果在Content-Type首部中没有指定charset字符集,那么浏览器就会重文档内容的meta标签查找对应的字符集。
多语言字符编码入门
字符集术语:
- 字符是指字母、数字、标点、表意文字、符号,或其它文本形式的书写‘原子’
- 字形描述字符的笔画图案或唯一的图形化形状
- 编码后的字符分配给字符的唯一数字编号,这样我们就可以操作它了
- 代码空间:计划用于字符代码值的整数范围
- 代码宽度:每个(固定大小的)字符代码所用的位数
- 字符库:特定的工作字符集(全体字符的一个子集)
- 编码后的字符集:组成字符库(从全球的字符中选出若干字符)的已编码字符集,并为每个字符分配代码空间中的一个代码
- 字符编码方案:把数字化的字符代码编码成一系列二进制码的算法
MIME中的charset值所命名的是把数据位映射为唯一的字符的一整套算法。它是字符编码方案和编码后的字符集这两种概念的组合。
字符是书写的最基本的构建单元。不要把字符和字形混淆,字符是唯一的、抽象的语言“原子”。字形是画出每个字符时使用的特定方式。根据艺术形式和手法的不同,每个字符可以有很多不同的字形。如果用一种字形替代另一种的时候,文本的意思变了,那这些字形就是不同的字符。否则,它们就是同一个字符的不同风格的表示形式而已。
字符编码方案:
- 固定宽度:固定宽度方式的编码用固定数量的比特表示每个编码后的字符。它们能被快速处理,但可能会浪费空间
- 可变宽度(无模态):可变宽度方式的编码对不同的字符代码数字采用不同数量的比特。对于常用字符,这样可以减少需要的位数,而且还能减少需要的位数,而且还能在允许使用多字节来表示国际性字符的同时,保持对传统8位字符集的兼容性。
- 可变宽度(有模态):有模态的编码使用特殊的“转义”模式在不同的模态之间切换。例如,可以用有模态的编码在文本中使用多个互相有重叠的字符集。有模态的编码处理起来比较复杂,但它们可以有效地支持复杂的书写系统。
语言标记与HTTP
Content-Lenguage首部字段描述实体的目标受众语言。Accept-Language首部描述的是客户端能或优先接收的语言。两个首部都接收多个语言标记。
下一节:本章主要讲解了一种机制:同样的url,客户端和服务器之间如何根据客户端的需要发送适当的版本文档给客户端,比如同样在浏览器输入www.baidu.com,那么如果是英国的用户很可能希望收到的收到的是英语版本的网页,而在中国的用户很可能希望收到中文版本的网页,那么服务器是怎么实现根据需要发送不同的版本的呢!于是有了内容协商和转码!所谓内容协商指的是客户端和服务器通过在http报文设置相关首部来告诉对方自己需要什么、可以发送什么等,而转码则是把文档装成其他格式的文档,注意:转码和内容编码及传输编码不一样,后两者是更高层次上的编码!