您的位置:首页 > 其它

unicode、UTF-8、ASCII等编码方式的关系

2016-03-11 15:27 1051 查看
今天复习一些基础的时候,又看到”编码方式“的这个名词了。

搜索了一些资料,算是搞清了ASCII、unicode、UTF-8的关系了。

1、ASCII

ASCII是很久之前美国制定的一套字符编码,是英文字符到某个id的一个映射。

这个编码方式用一个字节来表示英文字符,但字节的最高位固定为0,可用字节位数为7位。

也就是说,ASCII最多只能表示2^7 = 128个字符

2、unicode

单单ASCII肯定是不够用的,毕竟世界上有那么多国家,不同国家之间很多都使用不同的语言。

在没有unicode的时候,各个国家自己可能都有一套编码方式,这对交流带来很大的不便。

为了统一,就出现了unicode。

简单来讲,unicode的目的就是为世界上的字符制定一个从字符到独一无二的id的映射

可以从http://www.unicode.org/Public/UCD/latest/charts/这个网站下载unicode的编码表。

3、UTF-8
UTF-8是unicode的一种实现方式,实现了unicode的存储,同时与ASCII兼容。

unicode只规定了每个字符对应的id,并没有规定字符应该如何存储。

4、GB2312

兼容ASCII编码的汉字编码表,包含了常用的汉字的编码(也就是说,没有包含所有的汉字)

下面做个试验。打开记事本,分别用ASCII、unicode、UTF-8的方式保存"你a"这两个字。

用16进制方式打开,可以看到存储的字节:

ASCII: C4 E3 61

unicode:FF FE 60 4F 61 00

UTF-8:EF BB BF E4 BD A0 61

"a"的ASCII值为0x61

从unicode编码表可以查到"你"对应的值为0x4F 0x60

而从http://www.knowsky.com/resource/gb2312tbl.htm中的GB2312表中,我们可以查到"你"对应的值为0xC4 0xE3

刚好与上面贴出的存储字节相对应。

另外一点,记事本所谓的保存方式,在我看来,是很不严谨的

unicode只是规定了字符的映射关系,并没有规定字符该如何存储,记事本里用某种实现方式来代表unicode。

ASCII也只是规定了英文字符的映射(存储)方式,并没有规定汉字该如何存储,记事本里用GB2312(也许是?)

来代表ASCII。

这些很容易给人带来误导。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编码方式 unicode UTF-8