字符集 编码

字符是人类创造出来的,代表了一定的含义的符号,这些符号在计算机中如何存储?

计算机中只有0和1,那么存储一个字符肯定需要计算机中的若干位才行,比如一个字节可以存256种字符。那么存储字符的关键性问题就设计以下的两个方面:

(1)每一个字符的数值;

(2)编码方式,即用多少位表示一个字符。

以上两个要素中,(1)可以称为字符集,就是字符到数值的映射,(2)可以成为编码方式,即如何划分bit位。


ASCII码是最常用的标准,当然这是美国人发明出来用于存储英文的标准,因此字符不多。规定用一个字节来表示128个符号。最高位全部是0,其余的7位是具体值。当然也规定了字符到数值的映射。其中关于英文字母的字符数值,基本被其余的标准所兼容,这就是英文不会乱码的原因,而标点符号之类的字符,可能与其他的标准有区别,比如和中文的标准就不一样,这就是所谓的半角和全角。


ASCII码的字符集只能有256个。那么要想存储其他语言中的字符,可能就不够,比如汉字就有几千字符。于是,各个地区就开始制定各自的标准,但是这只能在各自的地区中使用,如果跨地区就需要蛋疼的转码。最后,国际上制订了unicode标准,规定了世界上任何一个符号的数值,被称为码点(code point)。


unicode的编码是按照平面来组织的,每一个平面定规2的16次方个字符数值,目前总共有17个平面。


unicode仅仅规定了字符到数值的映射,就是(1),但是它并没有规定编码方式,也就是(2)。


常见的编码方式有utf-8,它规定了怎么划分bit位。

utf-8是一种可变长的编码方式,如果是英文字符,只需要8位来表示,如果是其他的字符,则按需分配位数。这样可以节省存储空间。具体的规则如下:

按照字节读取,

如果第一位是0,则后面的7位是该字节的unicode码,这与ASCII兼容;

如果第一位是1,则表明这不是单字节,该字符需要n(n>1)个字节表示,n就等于从第一位开始连续出现的1的个数,第n+1位是0,之后的n-1个字节的前两位都是10开头,其余的bit位为该字符的数值。用图表示更直观。


(注:该图片取自http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html


总结:

1.存储字符涉及字符集和编码两个方面;

2.ASCII标准是英文的解决;

3.UTF-8 + unicode才是世界上全部字符的解决,二者各自解决字符集和编码两个方面。


更多内容:

http://www.ruanyifeng.com/blog/2014/12/unicode.html

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

http://www.freebuf.com/articles/others-articles/25623.html

http://www.zhihu.com/question/23374078

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值