博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unicode与UTF-8
阅读量:5961 次
发布时间:2019-06-19

本文共 1347 字,大约阅读时间需要 4 分钟。

hot3.png

Unicode与UTF-8的区别

Unicode是一个字符集,为了保证全球各个国家的字符都能有唯一的二进制码。

UTF-8 是 Unicode 字符集的一种编码实现方式,比如:

字符 Unicode  UTF-8                         
A 00000000 01000001       (16进制:0041 ) 01000001
01001110 00101101       (16进制:4E2D ) 11100100 10111000 10101101

那么疑问来了,Unicode已经统一了全球字符,为啥还需要UTF-8呢?

我们说Unicode字符“通常”只有2个字节,但Unicode的字节长度是可以扩展的,以支持那些还未出生的字符(如果将来发现火星上也有人类并且想和我们交流),因此在编码时,单纯地使用Unicode字符集的原始值,就会出现在解码的时候,不知道一次得截取几个字节来翻译成字符,比如6个字节的字符串,它到底是几个字符呢,可能3个,也可能2个。

于是乎,在使用Unicode字符集时,采取一种策略来支持可变长度字节的识别就成了一个刚需,这个时候UTF-8这种编码方式就粉墨登场了,基于Unicode字符集,通过特殊的“前缀码”来规定一个字符需要占用几个字节,恰好这个策略也完美兼容了单字节的Ascii码。

Unicode —>UTF-8 转换的规则如下:

Unicode(16进制) UTF-8 字节流(2进制)
00000000 - 0000007F 0xxxxxxx
00000080 - 000007FF 110xxxxx 10xxxxxx
00000800 - 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
00010000 - 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00200000 - 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
04000000 - 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

字符“A” 的16进制为0041,在00000000 - 0000007F区间,所以编码之后为1个字节。

字符“中”的16进制为4E2D,在00000800 - 0000FFFF区间,所以编码之后为3个字节。

假如解码时,遇到以下字节串:

01000001    11100100 10111000 10101101  

对于UTF-8来说,是这样完成的:

1,按顺序,先遇到第1个字节01000001,因为第1位二进制码是0,于是根据规则,断定当前字符的编码是1个字节,然后取出Unicode值1000001,翻译出字符“A”;

2,接着走,再遇到第2个字节11100100,因为前4位二进制码是1110,于是根据规则断定当前字符的编码是3个字节,匹配 1110xxxx 10xxxxxx 10xxxxxx后,取出Unicode值为 01001110  00101101,翻译出字符“中”;

转载于:https://my.oschina.net/wangxu3655/blog/781154

你可能感兴趣的文章
Docker笔记2——docker镜像命令
查看>>
另类说linux管理与实际应用(二)
查看>>
GitStack相关配置
查看>>
maven自动发布到服务器
查看>>
比对2个文件夹,删除已存在,或者 删除指定目录下,按文字开头(结束)文件
查看>>
uva 712 - S-Trees
查看>>
git 保存账号密码
查看>>
angularjs + fis +modJS 对于支持amd规范的组建处理(PhotoSwipe 支持,百度webUpload支持)...
查看>>
Spring Retry
查看>>
struts2源码分析-IOC容器的实现机制(上篇)
查看>>
meta之viewport
查看>>
手写SpringIoc底层实现代码,基于反射机制
查看>>
JPA学习笔记1——JPA基础
查看>>
Mac下Qt Creator无法输入中文的解决方法
查看>>
分享Android编程中Facebook图片加载库Fresco的使用
查看>>
【转载】知乎技术方案初探
查看>>
【转载】MySQL复制的概述、安装、故障、技巧、工具
查看>>
JXL导出Excel数据表
查看>>
数据库字段加1
查看>>
GNOME是最好的!
查看>>