介绍一直以来对unicode、UTF-8等编码知识一窍不通,尤其是在做项目的过程中,只要涉及到几个编码之间的转换,就得上网搜索。有问题只能靠葫芦娃来解决,私底下,根本不知道自己在干什么。不想再重复这种状态,所以花了一上午的时间整理这些知识。如果您认为我的总结有疑问或错误,欢迎讨论交流,批评指正。在进入正题之前,先介绍一下我总结出来的Unicode思维导图来预热一下:要理解Unicode,首先要从ASCII码入手。ASCII码什么是ASCII码?ASCII码(AmericanStandardCodeforInformationInterchange)简称美国信息交换标准码。它是一种基于拉丁字母的计算机编码系统。它定义了一个用来表示普通字符的字典。ASCII码中包括哪些字符?包括“A-Z”(大小写均可)、数据“0-9”和一些常用符号,查看完整的ASCII码对应关系,请参考ASCII码的局限在哪里?ASCII最初只是为美式英语设计的,只能显示128位代码,对其他语言无能为力。如果要显示其他语言的编码,还是要用unicode。Unicode什么是Unicode?为了统一记录世界的字符,并用唯一的编号记录每个字符,就产生了Unicode。Unicode,又称UCS(UniversalCodedCharacterSet:国际编码字符集),是对世界上大部分文字系统进行组织和编码的字符集,使计算机能够以更简单的方式呈现和处理文本。最新版本Unicode11.0已经包含137439个字符。Unicode的数量之多,如果全部覆盖的话,需要用4个字节来表示,但并不一定要用4个字节来完成计算机的存储过程。对于一些字符,尤其是编码在前面的字符,我们也可以使用1或2个字节来节省空间。这就涉及到unicode的实现。有多少种Unicode实现?Unicode只是一组字符,每个字符都用一个数字来表示,但是这些数字在计算机中是如何存储的,是全部都是4个字节,还是1到4个字节,这就涉及到字符编码的概念了。我们说Unicode有几种实现方式,即Unicode有多少种编码方式?常用的Unicode编码方式有3种:UTF-8、UCS-2、UTF-16。还有一个UTF-32虽然不常用,但也需要提一下。Unicode的架构是什么?Unicode既然能存储这么多字符,那肯定有它的存储规则。如果以十六进制存储,它的存储范围是多少?从低到高都是直的吗?也就是说Unicode的架构是怎样的。Unicode目前定义了它的字符存储范围:0hex到10FFFFhex,分为17段,可以存储1,114,112个字符,对于现在的(137439)来说已经足够了。从0hex到FFFFhex的段称为BasicMultilingualPlane(BMP),这个平面中的字符表示是U+后面跟着十六进制数。例如,X字符的unicode是U+0058。BMP范围之外的16段,即10000hex~10FFFFhex,需要用5~6位表示,如U+E0001、U+10FFFD。UTF-8编码UTF-8是互联网上使用最广泛的unicode编码方式,目前占整个互联网的92%。这里再强调一下,UTF-8只是Unicode的一种实现,UTF-8是一种编码方式,Unicode是一种字符集,是一种变长编码方式,长度从1字节到4字节不等。它与ASCII码完全兼容。我们知道ASCII码由128个字符组成,Unicode中的前128个字符与ASCII码是一一对应的。UCS-2编码UCS-2只用两个字节(16位)来表示字符,也就是说只能表示65536个字符,而且只能表示BMP中的字符。现在的unicode字符数已经远远超过了UCS-2的数量,所以UCS-2虽然还有很多软件在使用,但是已经过时了。正因为很多软件还在使用UCS-2编码,为了能够在BMP以外的平面表示字符,所以产生了新的编码UTF-16编码。UTF-16编码UTF-16就是为了解决UCS-2编码的问题而诞生的。由UCS-2BasicMultilingualPlane扩展而来,与UCS-2编码完全一致。它使用两个字节来表示U+010000U+10FFFF范围内使用4个字节的UTF-16编码的市场份额与UTF-8相比非常小,仅占网页的0.01%。并且主要用于windows系统,很少用于Unix/Linux和MacOS。UTF-32编码UTF-32使用4个字节来表示Unicode中的每个字符,它比其他编码占用更多的空间。正是由于这个原因,人们很少使用它。小结看到这里,想必你对unicode也有了一些了解吧。请再温习一下Unicode的思维导图,加深理解。总结一下要点:ASCII码只能表示128个字符,而且是专门为美式英语设计的。为了在其他语言中表示字符,就有了Unicode。Unicode只是一个字符集,它收集了世界上大多数语言的字符。特点。它有多种实现方式(编码方式),最常用的是UTF-8UTF-8编码是变长字节,1到4字节不等,完全兼容ASCII码参考文档维基百科Unicode
