UTF-8编码简介

        最近常用到把中文字符做UTF-8编码,虽说也用到各种编码,但具体分别还真不清楚,今天就翻资料整理学习一下。因为没有去图书馆或期刊查阅专业资料,所以基本上是把网上搜到的东西自己再整理一遍,加深自己理解。

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

1.  ASCII(American Standard Code for Information Interchange)美国标准信息交换交换标准码,从名字可以看出它最初由美国人定义(后来被ISO定义为国际标准),所以最初设计也主要是为了满足美国人使用。它用一个字节为基本单位,一个字节最多可以表示256,前0~127为标准ASCII,用来表示数字0~9,字母a~z,A~Z,+-*/一些常用符号和计算机命令,学C语言时课本后面都有这张表的。后面128~256为ASCII扩展码,用来表示一些图形之类的,后来被别的国家用来组合表示自己的语言。所以用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用数字0~0x10FFFF来映射这些字符,它的码位有一百多万,还定义了一些规则划分group和plan,这些规则看起来挺绕就没有研究。总之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是一种变长编码,可以用1~4个字节表示一个字符,为了支持这种变长,做了类似于赫夫曼编码的规则:

0000 - 007F 0xxxxxxx

0080 - 07FF 110xxxxx 10xxxxxx

0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx

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

例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx

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

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




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值