对Unicode和UTF8的个人理解 | 您所在的位置:网站首页 › utf-8编码的特点 › 对Unicode和UTF8的个人理解 |
最近正好在搞UTF8编码相关的知识,正好写成一篇文档,防止自己忘记,如果能启发他人,那就再好不过了。 在这里也贴一些我看过还觉得不错的博客,毕竟没有他们,我也不会懂得这么快 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html?bsh_bid=470843359 阮一峰老师的这篇博文,在我的所有搜索资料中,在启发性上面绝对算的上第一,有不懂得可以先看看这篇博客。
首先明确一个概念。 Unicode字符集 他是一个字符集,不是什么编码,也不要和UTF-8,UTF-16,UTF-32搞混了。 那么,什么叫字符集呢? 字符集就是字符、符号的集合,在它包含的符号范围里,只要存在这个符号,那就一定有他的唯一标识。 比方说字符“S”,它的编号是83号(第一位为0号),十六进制为0x53 再比方说“我”,他的编号是25105号,十六进制表示为0x6211 注意:这些数字全是字符‘S’在Unicode字符集中的唯一标识,没有经过任何编码。
在这个共识下,我们再谈下一步 UTF8是什么? UTF8是对Unicode编码的一种实现,抛开编码上的限制,他和UTF16、UTF32本质上做的事情是一样的。 UTF8的一大特点就是可变长编码,一个字符在经过编码后的数据长度范围可以是1~4个字节。
那么,UTF8是对什么东西编码呢? 结合上面的概念,没错! UTF8编码的对象是“任意字符在Unicode字符集中的编号”。 还是举个例子:比如中文字符“我” Unicode编号(16进制):0x6211 Unicode编号(2进制): 01100010 00010001 经过UTF8编码后(具体编码规则我就不写了) UTF8编码结果(16进制):0xE6,0x88,0x91 上面这个三字节的数据就是“我”字经过UTF8编码后的输出 而这个数据经过UTF8解码后得到的结果就是“我”在Unicode字符集中的编号。
其实到这里,Unicode和UTF8的本质已经讲完了 没有复综错杂的概念混淆 如果还没有搞清楚,可以看看我在上面贴出来的网址 |
CopyRight 2018-2019 实验室设备网 版权所有 |