字符编码 ASCII Unicode UTF-8

计算机中,用二进制0 1表示信息。每个表示0 1的二进制位为bit。

8个bit组成一个字节。可以表示2^8=256种可能。

eg:说ipv4的地址是由4个字节组成。就是0-255用一个字节表示,四位就是四个字节。

 

ASCII编码

美国制定的一套字符集编码。

用一个字节的后7位,表示128个不同的字符。第一位都为0。如32表示空格,65表示A

 

可是,当用asc2表示世界上其他语言时,一个字节,即使用上第一位,也不够。于是出现了许多他编码,如GB2312,规则不一。

为了让计算机认识各种语言,出现了统一的编码集Unicode。

 

Unicode

Unicode收录了全部的字符,并统一编号。但他之规定了字符的二进制编号,却没规定改如何存储。

有时,一个字符需要3,4个字节才能存储,而英文字母1个字节就能存储,因此unicode有两个问题:

1、计算机如何区分是unicode还是asc2?比如三个字节放一起,是解释成3个asc2的字符,还是1个unicode字符?(这也就是为啥java io中分字符类和字节类了)

2、1个英文字母,要使用3,4个字节存储,太浪费了。。

 

UTF-8

utf8出现了,并统一了编码规范。UTF-8是Unicode实现方式的一种。其他的utf-16,utf-32也有,但基本不被使用。

utf-8是1-4个字节变长的,也就是根据实际需要存储。

utf-8规则:

1、对于1字节的字符,第一位是0,后面7位是对应unicode编码,与asc2是一样的

2、对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

 

许多编辑工具可以查看编码方式,并根据算法互相转化编码。

 

以上为学习阮一峰老师博客笔记。

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

posted @ 2012-09-28 12:02  王冶soda  阅读(446)  评论(0编辑  收藏  举报