在这里我简单
![](/icons/40429de.gif)
谈
![](/icons/40429yi.gif)
下前端HTML和javascript日常工作中常碰到
![](/icons/40429de.gif)
编码问题
![](/icons/40429dou2.gif)
在计算机中
![](/icons/40429dou.gif)
我们储存
![](/icons/40429de.gif)
信息都是用 2进制码表示
![](/icons/40429de.gif)
![](/icons/40429dou2.gif)
我们认识
![](/icons/40429de.gif)
、屏幕上显示
![](/icons/40429de.gif)
英文、汉字等符号和储存用
![](/icons/40429de.gif)
2进制代码
![](/icons/40429de.gif)
互相转换
![](/icons/40429dou.gif)
就是编码
有两个基本概念需要介绍说明
![](/icons/40429dou.gif)
char
![](/icons/40429set.gif)
和 character encoding:
char
![](/icons/40429dou.gif)
![](/icons/40429zifu.gif)
集
![](/icons/40429dou.gif)
也就是某个符号和某个数字映射关系
![](/icons/40429de.gif)
![](/icons/40429yi.gif)
个表
![](/icons/40429dou.gif)
也就是它决定了107 是koubei
![](/icons/40429de.gif)
‘a'
![](/icons/40429dou.gif)
21475 是口碑
![](/icons/40429de.gif)
“口”
![](/icons/40429dou.gif)
区别
![](/icons/40429de.gif)
表有区别
![](/icons/40429de.gif)
映射关系
![](/icons/40429dou.gif)
如 ascii
![](/icons/40429dou.gif)
gb2312
![](/icons/40429dou.gif)
Unicode. 通过这个数字和
![](/icons/40429zifu.gif)
![](/icons/40429de.gif)
映射表
![](/icons/40429dou.gif)
我们可以把
![](/icons/40429yi.gif)
个 2进制表示
![](/icons/40429de.gif)
数字转换成某个
![](/icons/40429zifu.gif)
chracter encoding
![](/icons/40429dou.gif)
编码方式
![](/icons/40429dou2.gif)
例如
![](/icons/40429dou.gif)
同是对于应“口”
![](/icons/40429de.gif)
21475 这个数
![](/icons/40429dou.gif)
我们是用 \u5k3e3 表示呢
![](/icons/40429dou.gif)
还是用 %E5%8F%A3 来表示呢?这就是由 character encoding 来决定
![](/icons/40429de.gif)
对于 ‘koubei.com' 这样
![](/icons/40429zifu.gif)
串来说
![](/icons/40429dou.gif)
是美国人
![](/icons/40429de.gif)
常用
![](/icons/40429zifu.gif)
![](/icons/40429dou.gif)
他们就制定了
![](/icons/40429yi.gif)
个 叫做ASCII
![](/icons/40429de.gif)
![](/icons/40429zifu.gif)
集
![](/icons/40429dou.gif)
全称是 american standard code of information
![](/icons/40429int.gif)
erchange 美国标准信息交换码
![](/icons/40429dou.gif)
用0–127这128个数字
![](/icons/40429dou.gif)
(2
![](/icons/40429de.gif)
7次方
![](/icons/40429dou.gif)
0×00-0×7f) 代表了123abc这样
![](/icons/40429de.gif)
常用
![](/icons/40429de.gif)
128个
![](/icons/40429zifu.gif)
![](/icons/40429dou2.gif)
![](/icons/40429yi.gif)
共是 7 bits
![](/icons/40429dou.gif)
再加上第
![](/icons/40429yi.gif)
个是符号位
![](/icons/40429dou.gif)
要用来去补码反码表示负数什么
![](/icons/40429de.gif)
![](/icons/40429dou.gif)
![](/icons/40429yi.gif)
共8 bits 构成
![](/icons/40429yi.gif)
个
![](/icons/40429byte.gif)
![](/icons/40429dou2.gif)
当年美国人就是小气了点
![](/icons/40429dou.gif)
要是
![](/icons/40429yi.gif)
开始就设计成
![](/icons/40429yi.gif)
个
![](/icons/40429byte.gif)
是16 bits、32 bits
![](/icons/40429dou.gif)
世界上会少很多问题
![](/icons/40429dou.gif)
不过当时
![](/icons/40429dou.gif)
估计他们觉得 8 bits 就够了
![](/icons/40429dou.gif)
可以表示128个区别
![](/icons/40429de.gif)
![](/icons/40429zifu.gif)
呢!
介于计算机这玩意儿是美国人搞出来
![](/icons/40429de.gif)
![](/icons/40429dou.gif)
所以他们自己省事
![](/icons/40429dou.gif)
把自家用
![](/icons/40429de.gif)
符号都编码好了
![](/icons/40429dou.gif)
用
![](/icons/40429de.gif)
挺爽
![](/icons/40429de.gif)
![](/icons/40429dou2.gif)
但当计算机开始国际化
![](/icons/40429de.gif)
时候
![](/icons/40429dou.gif)
问题出来了
![](/icons/40429dou.gif)
拿中国举例吧
![](/icons/40429dou.gif)
汉字就好几万
![](/icons/40429dou.gif)
如何办?
现有
![](/icons/40429de.gif)
8 bits
![](/icons/40429yi.gif)
个
![](/icons/40429de.gif)
系统是基础
![](/icons/40429dou.gif)
不能破坏
![](/icons/40429dou.gif)
不能去改到 16 bits的类
![](/icons/40429de.gif)
![](/icons/40429dou.gif)
否则改动太大了
![](/icons/40429dou.gif)
只能走另
![](/icons/40429yi.gif)
条路:用多个 ascii
![](/icons/40429de.gif)
![](/icons/40429zifu.gif)
去表示
![](/icons/40429yi.gif)
个其他
![](/icons/40429zifu.gif)
![](/icons/40429dou.gif)
也就是 MBCS ( Multi-Byte Character
![](/icons/40429System.gif)
![](/icons/40429dou.gif)
多字节
![](/icons/40429zifu.gif)
系统)
有了这个 MBCS
![](/icons/40429de.gif)
概念
![](/icons/40429dou.gif)
我们可以表示更多个
![](/icons/40429zifu.gif)
了
![](/icons/40429dou.gif)
比如我们用 2 个 ascii
![](/icons/40429zifu.gif)
![](/icons/40429dou.gif)
就有 16 bits, 理论上有 2
![](/icons/40429de.gif)
16 次方 65536 个
![](/icons/40429zifu.gif)
![](/icons/40429dou2.gif)
但这些编码如何分配到
![](/icons/40429zifu.gif)
上呢?比如口碑
![](/icons/40429de.gif)
”口”
![](/icons/40429de.gif)
Unicode 编码就是 21475
![](/icons/40429dou.gif)
谁决定
![](/icons/40429de.gif)
呢?
![](/icons/40429zifu.gif)
集
![](/icons/40429dou.gif)
也就是刚刚介绍
![](/icons/40429de.gif)
char
![](/icons/40429set.gif)
![](/icons/40429dou2.gif)
ascii就是最基础
![](/icons/40429de.gif)
![](/icons/40429yi.gif)
个
![](/icons/40429zifu.gif)
集
![](/icons/40429dou.gif)
在此的上
![](/icons/40429dou.gif)
我们有类似于 gb2312
![](/icons/40429dou.gif)
big5这样针对简体中文和繁体中文
![](/icons/40429de.gif)
MBCS
![](/icons/40429de.gif)
![](/icons/40429zifu.gif)
集等等
![](/icons/40429dou2.gif)
终于有个叫 Unicode Consortium
![](/icons/40429de.gif)
机构
![](/icons/40429dou.gif)
决定做
![](/icons/40429yi.gif)
个囊括所有
![](/icons/40429zifu.gif)
在内
![](/icons/40429de.gif)
![](/icons/40429zifu.gif)
集(UCS, Universal Character Set)和对应编码方式
![](/icons/40429de.gif)
标准
![](/icons/40429dou.gif)
即 Unicode
![](/icons/40429dou2.gif)
从1991年开始
![](/icons/40429dou.gif)
它发布了第
![](/icons/40429yi.gif)
版 Unicode 国际标准
![](/icons/40429dou.gif)
ISBN 0-321-18578-1
![](/icons/40429dou.gif)
国际标准化组织 ISO 也参和了这个
![](/icons/40429de.gif)
定制
![](/icons/40429dou.gif)
ISO/IEC 10646 : the Universal Character Set
![](/icons/40429dou2.gif)
总的
![](/icons/40429dou.gif)
Unicode 是个基本覆盖了所有已经存在
![](/icons/40429de.gif)
地球上
![](/icons/40429de.gif)
符号
![](/icons/40429de.gif)
![](/icons/40429zifu.gif)
标准了
![](/icons/40429dou.gif)
现在正在被越来越广泛
![](/icons/40429de.gif)
使用
![](/icons/40429dou.gif)
ECMA 标准也规定
![](/icons/40429dou.gif)
javascript语言
![](/icons/40429de.gif)
内部
![](/icons/40429zifu.gif)
使用 Unicode 标准(这意味着
![](/icons/40429dou.gif)
javascript
![](/icons/40429de.gif)
变量名、
![](/icons/40429hanshu.gif)
名等是允许中文
![](/icons/40429de.gif)
!)
对于身在中国
![](/icons/40429de.gif)
开发者来说
![](/icons/40429dou.gif)
可能碰到比较多
![](/icons/40429de.gif)
问题就是 gbk, gb2312, utf-8 的间转换的类
![](/icons/40429de.gif)
问题了
![](/icons/40429dou2.gif)
严格
![](/icons/40429de.gif)
说这个说法不是很准确
![](/icons/40429dou.gif)
gbk
![](/icons/40429dou.gif)
gb2312是
![](/icons/40429zifu.gif)
集 (char
![](/icons/40429set.gif)
)
![](/icons/40429dou.gif)
而 utf-8 是
![](/icons/40429yi.gif)
种编码方式 (character encoding)
![](/icons/40429dou.gif)
是 Unicode 标准中 UCS
![](/icons/40429zifu.gif)
集
![](/icons/40429de.gif)
![](/icons/40429yi.gif)
种编码方式
![](/icons/40429dou.gif)
![](/icons/40429yinwei.gif)
使用 Unicode
![](/icons/40429zifu.gif)
集
![](/icons/40429de.gif)
网页主要用UTF-8编码
![](/icons/40429dou.gif)
所以大家常常就把它们并列了
![](/icons/40429dou.gif)
其实是不准确
![](/icons/40429de.gif)
有了 Unicode 后
![](/icons/40429dou.gif)
至少人类文明没有碰到外星人的前
![](/icons/40429dou.gif)
这是
![](/icons/40429yi.gif)
把万能钥匙了
![](/icons/40429dou.gif)
都用它吧
![](/icons/40429dou2.gif)
而现在使用最广泛 Unicode
![](/icons/40429de.gif)
编码方式就是 UTF-8 (8-bit UCS/Unicode Transformation Format) 了
![](/icons/40429dou.gif)
它有几个特别好
![](/icons/40429de.gif)
地方:
编码 UCS
![](/icons/40429zifu.gif)
集
![](/icons/40429dou.gif)
全世界通用
是
![](/icons/40429yi.gif)
种变长编码方式(variable-length character encoding)
![](/icons/40429dou.gif)
兼容 ascii
第 2点是个很大
![](/icons/40429de.gif)
优点
![](/icons/40429dou.gif)
它使得以前使用纯 ascii 编码
![](/icons/40429de.gif)
系统兼容
![](/icons/40429dou.gif)
而且不会增加额外
![](/icons/40429de.gif)
存储量(假设定长
![](/icons/40429de.gif)
编码方式
![](/icons/40429dou.gif)
规定每个
![](/icons/40429zifu.gif)
由2个
![](/icons/40429byte.gif)
s 组成
![](/icons/40429dou.gif)
那么这时候 ascii
![](/icons/40429zifu.gif)
占用
![](/icons/40429de.gif)
存储空间将增大
![](/icons/40429yi.gif)
倍)