字符编码

下面解释ASCII、ANSI、Unicode、UTF-8及其区别于联系。


ASCII码:American Standard Code for Information Interchange. 美国针对英文字母、数字及一些看不到的“字符”所设计的编码格式。用一个字节的低7位来表示这些字符(最高位不用,可以用来奇偶校验),总共可以表示128个字符。ASCII是一种编码标准,一种对应关系,其在计算机内的实现很简单,用一个字节表示一个字符即可。


ANSI:American National Standard Institute. 这不是一种具体的编码标准,而是指几种可能的编码的集合。在欧洲和亚洲一些国家字符集比较大,用ASCII码不能表示全部的这些字符,所以每种语言可能有自己的相对于ASCII码的扩展码。这些扩展码一般用两个字节表示(每个字节的范围都是0x80-0xff,即没有与ASCII码冲突)。这些两个字节的扩展码统称为ANSI码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ASNI编码与Unicode编码之间最大也最明显的区别。


Unicode码:每种语言都有自己的扩展码,这些扩展码各不相同,即同一个扩展码在不同的语言中表示不同的内容。要对一个文本进行解析,必须先知道它的编码方式是什么样的,这样是即不方便的。因此出现了一种将所有语言系统的符号全部包含进来的编码标准,这就是Unicode编码。注意,Unicode只是一种编码标准。计算机内部的具体实现可以有不同的实现方式。UTF-8就是Unicode的一种实现方式。


UTF-8:Unicode Transformation Format. UTF-8是Unicode的一种变长实现方式。它的特点就是变长。根据某个字符所对应的Unicode的不同值,计算机内部采用不同的字节数来表示这个字符。ASCII码能表示的字符就直接用一个字节的ASCII码来表示(第一个bit位为0)。多于一个字节的字符,假如首字节的前n位为1,第n+1位为0,则这个字符共用n个字节来表示,首字节后面的n-1个字节的前两位为10。n个字节中剩下的所有位用来存储这个字符对应的Unicode码。以“严”字为例来解释UTF-8编码,已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。 Unicode码的范围与UTF-8的编码对应关系如下:


    Unicode符号范围 | UTF-8编码方式
    (十六进制) | (二进制)
    --------------------+---------------------------------------------
    0000 0000-0000 007F | 0xxxxxxx
    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
UTF-8在互联网上应用最广泛。


在中文简体版Windows操作系统中的写字板支持4中不同的编码格式,分别是:ANSI、Unicode、UTF-8、Unicode-big-endian.

其中的Unicode指的是UCS-2 little endian。

UCS-2是一种用两个字节来存储Unicode码的一种实现方式(可能省略了一些字符,因为两个字节不能全部表示Unicode码)。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值