加载中…

加载中...

16 国际化-- 《http权威指南》学习笔记

转载 2016-02-19 21:14:46

对 HTTP 协议来说,所发送的实体主体只是一些二进制信息而已,如何理解这些二进制信息,是中文还是英文?

从服务器角度来说,它要告诉客户端这些文档的字母表和语言,这是通过 content-type 首部的 charset 参数和 content-language 来告知的。

而从客户端角度来说,要告知服务器用户理解何种语言,浏览器上安装了何种字母表编码算法。

客户端发送的是 accept-charset 首部和 accept-language 首部,告知服务器它所能理解的那些字符集编码算法和语言,以及他们的优先顺序。

比如说这样的:

accept-language: fr, en; q=0.8

accept-charset:iso-8859-1, utf-8

这里语言是法语,英语,Q 质量因子(表示权重)是0.8 (对于英语)

1. 字符集

字符集表明了如何把二进制码转换成特定字母表的字符。

每个字符集都命名了一种把二进制码转换成字符的算法。

IANA 维护着所有的字符集。你可以在下面的网页找到相关信息:

http://www.iana.org/assignments/character-sets/character-sets.xhtml

下面的例子用 content-type 告知接收者,传输的内容是 html 文档,用 charset 参数, 使用 iso-8859-6 阿拉伯字符集的解码算法把内容的二进制码转换为字符。

Content-type:text/html; charsetiso-8859-6

由于每种语言的字符数目不同,编码也会不同。

阿拉伯语字符比较少,只有28个字符,可以用 8 位来表示一个字符,因为 8 位比特有 256 个不同的值,可以容纳所有的拉丁字符加上阿拉伯字符和其他符号。

但是8位比特对于日语或者汉语来说,却不一定够。


编码是如何工作的?

把二进制码转换成字符需要两个步骤,如下图所示

要是使用了错误的字符集,那么对应的二进制数显示在上面就会奇奇怪怪。

比如对于 b11100001, 也就是十进制的 225, 

对应的 iso-8859-1,显示的小写拉丁字母 a

对应的 iso-8859-6 阿拉伯编码,就会显示阿拉伯字母 FEH,

对应的 ios-8859-7 希腊编码,就是小写的希腊字母alpha

对应的 ios-8859-8 希伯来编码,就是希伯来字母 BET

除了在首部显示 字符集,我们也可以在 html 文件中 规定字符集,比如:

如果啥都没有规定,那么默认值是 iso-8859-1。


这么多的字符编码,客户端并不一定都支持。

那么这是客户端就可以 发送accept-charset 给服务器,让他从列表中选。

比如:

accept-charset: iso-8859-1,utf-8

有洁癖的人会为没有 conet-charset 这样的响应首部而抓狂,charset 作为参数放在content-type 中看上去总是有点不太爽。不过就是这样了。


阅读(0) 评论(0) 收藏(0) 转载(0) 举报/Report

评论

重要提示:警惕虚假中奖信息
0条评论展开
相关阅读
加载中,请稍后
easyfly.huang
  • 博客等级:
  • 博客积分:0
  • 博客访问:32,423
  • 关注人气:0
  • 荣誉徽章:

相关博文

推荐博文

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有