字符和字符编码

字符集

字符集只是一个规则集合的名字,

字符编码

对于一个字符集,要正确编码转码一个字符需要三个关键元素:

  • 字库表(character repertoire): 所有可读或者可显示字符的数据库。
  • 编码字符集(coded character set): 用一个编码值表示一个字符在字库中的位置
  • 字符编码(character encoding form):将编码字符集和实际存储数值之间的转换关系。

ASCII码

在计算机内部,所有的信息最终被表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位(即一个字节)就可以组合出256种状态。也就是说一个字节可以用来表示256种不同的状态。
上世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,即ASCII码。
ASCII码一共规定了128个字符的编码。这128个字符只占用了一个字节的后面7位,最前面的一位统一规定为0.

ASCII码

Unicode

如果有一种编码,将世界上所有的符号都纳入其中,每个符号都给予一个独一无二的编码,那么乱码问题就会消失。Unicode就是一种所有符号的编码。
Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

UTF-81

UTF-8是Unicode的实现方式之一。UTF-8最大的一个特点,就是它是一种变长的编码方式,可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8编码实现方式

  • 如果一个字节的第一位为0,那么代表当前字符为单字节字符,占用一个字节的空间。0之后的所有部分(7bit)代表在Unicode中的序号,此时,UTF-8和ASCII是一致的。
  • 如果一个字节以110开头,那么代表当前字符为双字节字符,占用两个字节的空间。110之后所有部分(5bit)加上后一个字节的除10外的部分(6bit)代表Unicode中的序号,且第二个字节以10开头
  • 如果一个字节以1110,那么代表当前字符为三字节字符,占用3个字节的空间。1110之后的所有部分(5bit)加上后两个字节的除10外的部分(12bit)代表在Unicode中的序号,且第二、第三个字节以10开头
  • 如果一个字节以11110开头,那么代表当前字符为四字节字符,占用4个字节的空间。11110之后所有部分(3bit)加上后面3个字节的除了10以外的部分(18bit)代表在Unicode中的序号。
  • 如果一个字节以10开头,那么代表当前字节为多字节字符的第二个字节。10之后的所有部分(6bit)和之前的部分一同组成在Unicode中的序号。

windows上常见的ANSI[^4]

在windows系统上保存文本文件,常见到ANSI格式,该格式时默认编码,对于英文文档是ASCII编码,对于中文文本是GB2312编码

参考文献

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值