字符编码学习总结

一、ASCII编码

        ASCII(美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,只要用于显示现代英语和其他西欧语言。
        ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母、数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。
        在标准的ASCII中,其最高位用作奇偶校验位。所谓的奇偶校验是指代码传送过程中用来检验是否出错误的一种方法,一般分奇校验和偶检验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位添1;偶检验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位添1。
        在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。比如在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定利用字节中闲置的最高位编入新的符号。

二、ANSI编码

        不同的国家和地区制定了不同的标准,由此产生了GB2312、GBK、Big5、Shift_JIS等各自的编码标准。这些使用1至4个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI编码。在简体中文Windows操作系统中,ANSI编码代表GBK编码;在繁体中文Windows操作系统中,ANSI编码代表Big5编码;在日文Windows操作系统中,ANSI编码代表Shift_JIS编码。不同ANSI编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段ANSI编码的文本中。当然对于ANSI编码而言,0x00~0x7f之间的字符,依旧是1个字节代表一个字符。这一点时ANSI编码与Unicode编码之间最大也是最明显的区别。

三、UNICODE编码

        UNICODE是一种字符编码方法,它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。UNICODE的学名是“Universal Multiple-Octet Coded Character Set",简称为USC。采用了这种编码方式后,世界上所有的语言字符都有一个UNICODE编码。
        UNICODE虽然为所有语言所有字符都编了一个号,但是并未规定如何存储,传输这些UNICODE字符。例如英文的”a“,可以采用UNICODE编码存储,这样它将占用4个字节,但其实字符”a“用一个字节就可以表示。
        计算机采用UNICODE之后,内存中并不存放UNICODE字符得编码,而是存放字符在UNICODE字符集中得序号(如果是ANSI字符,它们的序号和UNICODE编码相同)。

四、UTF-8编码

        目前最常用的UTF编码分为3种,UTF-8、UTF-16、UTF-32,下面只针对UTF-8进行学习。UTF-8主要是针对UNICODE编码的缺点进行设计的,如果用UNICODE编码来存储或传输一个英文字母,需要4个字节,但是其实只需要1个字节就可以,这样造成空间的极大浪费,所以UTF-8编码就是为了解决UNICODE的缺点而产生的。UTF-8编码最大的特点就是可边长编码:它根据不同的字符来改变字节长度,比如ASCII码范围时用一个字节表示(保留ASCII码的编码方式),UNICDODE中中文字符占两个字节,而在UTF-8中占3个字节,而且UNICODE和UTF-8之间需要通过一系列的算法和规则来进行转换并非直接转换。

五、UNICODE与UTF-8之间的转换

UNICODE与UTF-8转换表:

Unicode编码(十六进制)UTF-8字节流(二进制)
0000 0000 - 0000 007F0xxxxxxx
0000 0080 - 0000 07FF110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 001F FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

说明:除了第一行,其他三行中UTF-8列的最左边的1的个数表示某个字符用多少个字节表示,第一行代表一个字符用一个字节表示。

例子:
        “汉”字的Unicode编码时0xc49(110 1100 0100 1001),通过上面的转换表发现0x0000 6c49位于第三行的范围,那么得出其格式为1110xxxx 10xxxxxx 10xxxxxx。从"汉"的二进制数最后一位开始,从后往前依次填充对应格式中的x,多出的x用0补上。这样就可以得到“汉”的UTF-8编码为1110 0110 1011 0001 1000 1001,转换为十六进制为0xE6B789。

六、计算机系统中的编码应用

        在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码;用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器,所以很多网页的源码上会有类似<meta charset=“utf-8”/>的信息,表示该网页正是用的UTF-8编码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值