unicode编码(Unicode编码)

时间:2024-12-22 22:46:04 阅读:1

Unicode编码

以上我们先容了中文和西欧的字符与编码,但天下上另有很多其他国度的字符,每个国度的种种盘算机厂商都对本人常用的字符举行编码,在编码的时分基本忽略了其他国度的字符和编码,乃至忽略了同一国度的其他盘算机厂商,如此形成的后果就是,显现了太多的编码,且互相不兼容。
天下上一切的字符能不克不及一致编码呢?可以,这就是Unicode。


Unicode做了一件事,就是给天下上一切字符都分派了一个唯一的数字编号,这个编号范围从0x000000~0x10FFFF,包含110多万。但大局部常用字符都在0x0000~0xFFFF之间,即65536个数字之内。每个字符都有一个Unicode编号,这个编号寻常写成十六进制,在前方加U+。大局部中文的编号范围为U+4E00~U+9FFF,比如,“马”的Unicode是U+9A6C。


简便了解,Unicode主要做了这么一件事,就是给一切字符分派了唯一数字编号。它并没有划定这个编号怎样对应到二进制表现,这是与外表先容的其他编码不同的,其他编码都既划定了能表现哪些字符,又划定了每个字符对应的二进制是什么,而Unicode本身只划定了每个字符的数字编号是几多。
那编号怎样对应到二进制表现呢?有多种方案,主要有UTF-32、UTF-16和UTF-8。


1.UTF-32
这个最简便,就是字符编号的整数二进制情势,4个字节。
但有个细节,就是字节的分列排序,假如第一个字节是整数二进制中的最高位,最初一个字节是整数二进制中的最低位,那这种字节序就叫“大端”(Big Endian,BE),不然,就叫“小端”(Little Endian,LE)。对应的编码办法分散是UTF-32BE和UTF-32LE。
可以看出,每个字符都用4个字节表现,十分糜费空间,实践接纳的也比力少。


2.UTF-16
UTF-16使用变长字节表现:
1)关于编号在U+0000~U+FFFF的字符(常用字符集),直接用两个字节表现。必要分析的是,U+D800~U+DBFF的编号但是是没有界说的。


2)字符值在U+10000~U+10FFFF的字符(也叫做增补字符集),必要用4个字节表现。前两个字节叫高署理项,范围是U+D800~U+DBFF;后两个字节叫低署理项,范围是U+DC00~U+DFFF。数字编号和这个二进制表现之间有一个转换算法,本书就不先容了。
区分是两个字节照旧4个字节表现一个字符就看前两个字节的编号范围,假如是U+D800~U+DBFF,就是4个字节,不然就是两个字节。
UTF-16也有和UTF-32一样的字节序成绩,假如高位存放在前方就叫大端(BE),编码就叫UTF-16BE,不然就叫小端,编码就叫UTF-16LE。
UTF-16常用于体系内里编码,UTF-16比UTF-32节流了很多空间,但是任何一个字符都最少必要两个字节表现,关于美国和西欧国度而言,照旧很糜费的。


3.UTF-8
UTF-8使用变长字节表现,每个字符使用的字节个数与其Unicode编号的轻重有关,编号小的使用的字节就少,编号大的使用的字节就多,使用的字节个数为1~4不等。
具体来说,各个Unicode编号范围对应的二进制格式如表2-6所示。
表2-6 UTF-8编码的编号范围与对应的二进制格式


表2-6中的x表现可以用的二进制位,而每个字节开头的1或0是安稳的。
小于128的,编码与ASCII码一样,最高位为0。其他编号的第一个字节有特别涵义,最高位有几个一连的1就表现用几个字节表现,而其他字节都以10开头。
关于一个Unicode编号,具体怎样编码呢?起首将其看作整数,转化为二进制情势(去掉高位的0),然后将二进制位从右向左依次填入对应的二进制格式x中,填完后,假如对应的二进制格式另有没填的x,则设为0。


我们来看个例子,“马”的Unicode编号是0x9A6C,整数编号是39532,其对应的UTF-8二进制格式是:
1110xxxx 10xxxxxx 10xxxxxx
整数编号39532的二进制格式是:
1001 101001 101100
将这个二进制位从右到左依次填入二进制格式中,后果就是其UTF-8编码:
11101001 10101001 10101100
十六进制表现为0xE9A9AC。
和UTF-32/UTF-16不同,UTF-8是兼容ASCII的,对大局部中文而言,一此中笔墨符必要用三个字节表现。


4.Unicode编码小结
Unicode给天下上一切字符都划定了一个一致的编号,编号范围到达110多万,但大局部字符都在65536以内。Unicode本身没有划定怎样把这个编号对应到二进制情势。
UTF-32/UTF-16/UTF-8都在做一件事,就是把Unicode编号对应到二进制情势,其对应办法不同罢了。UTF-32使用4个字节,UTF-16大局部是两个字节,少局部是4个字节,它们都不兼容ASCII编码,都有字节排序的成绩。UTF-8使用1~4个字节表现,兼容ASCII编码,英笔墨符使用1个字节,中笔墨符大多用3个字节。


想要了解更多Java基本知识,可以点击批评区链接和小编一同砚习java吧,此视频教程为初学者而著,零基本入门篇!给同砚们带来全新的Java300集课程啦!java零基本小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享用_哔哩哔哩_bilibili

版权声明:本文来自互联网整理发布,如有侵权,联系删除

原文链接:https://www.yigezhs.comhttps://www.yigezhs.com/qingganjiaoliu/56814.html


Copyright © 2021-2022 All Rights Reserved 备案编号:闽ICP备2023009674号 网站地图 联系:dhh0407@outlook.com