前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UTF8变长编码

UTF8变长编码

作者头像
小蜜蜂
发布2019-07-22 11:22:43
2.8K0
发布2019-07-22 11:22:43
举报
文章被收录于专栏:明丰随笔明丰随笔

首先要说明的是我们所有的信息都是以二进制字节的形式保存的,比如00000000这样的8个0就代表一个字节了。

1个字节一共有256中变化,不能用来表示我们大千世界的所有文字,(想想中文就知道了)。

所以为了能有一种编码表示所有语言的文字,那我们就得加长位数,比如全世界有256*256*256*256个不同的文字,那么我们就得用4个字节的二进制来表示。

说英语的国家就吃亏了,因为他们明明用一个字节就能表示一个字母,却因为要配合我们,要用好四个字节表示一个字母,保存字母的硬盘会白白浪费了大量了空间。

怎么解决这个问题?

UTF8变长编码可以解决。有的文字是1个字节存储的,有的文字是2个字节存储的,还有3个字节存储的,还有4个字节存储的。

最后集合起来就是一共有一到四字节四种变长的编码。

一字节:0*******

两字节:110*****,10******

三字节:1110****,10******,10******

四字节:11110***,10******,10******,10******

就是这四种情况。相信你已经知道我们怎么来判断一个字是几字节的了。

如果是以0开头的,那么他就是一个1字节编码,取到它一字节的数据去一字节表中找就OK了。

如果是以110开头的,那么它就是一个2字节编码,取到它两字节的数据去两字节表中找就OK了,而且它的第二个字节一定要是10开头,不然就是乱码了。

后面类推。

核心之处就是:

把0,110,1110,11110这4种比特用在不同的位置而区分开不同长度的编码.

把10这个比特用来连接多字节字符之间的多个字节。

还有一点要说明,就是一个UTF8格式的文件,它要表明它的身份,以让人用UTF8的读法来读它。

可能我们仔细的看一下这个文件的内容,看一下字节出现个格式,和我们上面所说的是否一样,也就知道它是不是UTF8编码了。

不过还有一种保险一点的方法,就是在文件的最开头加上三个字节的信息,这三个字节比较少见,所以一见到它们三个开头,我们就知道是UTF8格式的文件了,使用这种方式可以让我们快速判断出来文件是不是UTF8格式的,有助于提高性能,不过这不是必须的,我们没有这三个字节也可以判断文件的格式是不是UTF8编码方式。

比如UltraEdit这个强大的工具,我们可以用它查看16进制,你可以试试建立一个文本,然后用16进制模式打开,记一下它开头的几个字节,然后保存为UTF8,再看一下前几个字节,就会发现多了三个字节。这就是刚才说的头,它的学名叫BOM。

这三个字节分别是:EF BB BF

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 明丰随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档