编码格式介绍

计算机的世界用01表示一切,bit为计算机数据的最小单位,有01两种状态,我们称为比特,为了方便计量,我们把8位叫做一个字节(byte),字节是计算机数据传输的基本单位。为了能够让这些01有意义,就对它们进行编码,每种01组合表示什么意义,所以也就有了以下的各种编码。


1.  ASCII(American Standard Code for Information Interchange)美国标准信息交换交换标准码,从名字可以看出它最初由美国人定义(后来被ISO定义为国际标准),所以最初设计也主要是为了满足美国人使用。它用一个字节为基本单位,一个字节最多可以表示256,前0127为标准ASCII,用来表示数字09,字母a~z,A~Z+-*/一些常用符号和计算机命令,学C语言时课本后面都有这张表的。后面128~256ASCII扩展码,用来表示一些图形之类的,后来被别的国家用来组合表示自己的语言。所以用ASCII表示美国人的语言就很容易了,例如"hi man",翻译成ASCII就是:104(h)105(i)32(space)109(m)91(a)110(n),转成二进制就可以用上面说的那坨01来表示了。


2. Unicode,称为万国码,是国际组织定义的可以容纳世界所有文字和符号的一种编码。继续说上面,因为ASCII不能满足其它国家的需要,所以各国都定义了自己的编码,像中国的gb2312,就使用2个字节(可以表示256*256个字符)表示一个汉字。各国定义自己的编码很容易会出现混乱,一段编码必须知道它的编码方式和安装它对应的编码库才能解码,所以就出现了Unicode. Unicode用数字00x10FFFF来映射这些字符,它的码位有一百多万,还定义了一些规则划分groupplan,这些规则看起来挺绕就没有研究。总之Unicode的出现,可以让世界上各种字符都在同一套编码规范下传输了。Unicode只是种编码方式,目前国际使用的为版本为UCS-2,即用两个字节即16位来进行编码,基本满足世界常用编码需求,UCS-4可用32位来进行编码,低16位可以跟UCS-2一致。


3.UTF-8(Unicode Transformation Formation)Unicode是一种编码方式,按目前国际通用的UCS-2,每一个字符要用2个字节来表示,这在很大情况下会造成浪费,尤其是用来表示英文字符时。所以在实际传输时,不同的系统对Unicode的实现方式有所不同,UTF-8是一种常用的实现方式。UTF-8是一种变长编码,可以用14个字节表示一个字符,为了支持这种变长,做了类似于赫夫曼编码的规则:

0000 - 007F 0xxxxxxx

0080 - 07FF 110xxxxx 10xxxxxx

0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx


普通的ASCII编码的内容在UTF-8编码中依然可以用一个字节表示,而其它字符根据它的Unicode编码数值大小,分别用一个、两个或三个字节来表示。下面是网传的一个例子直接拷过来了。

例如字的Unicode编码是6C496C490800-FFFF之间,所以肯定要用3字节模板了:1110xxxx

10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001

用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值