1、Unicode 这个单词可以拆解为两部分,一个是Uni ,即英文单词unique的意思,也就是唯一的意思。code就是编码的意思。
GBK编码的理解_sgmcy的博客-CSDN博客
在上节博客里面,介绍了ASCII编码、ASCII编码表的扩展以及我们国家汉字的GBK编码。
那么全世界有那么多种语言,那么多种字符,有字母(即使是字母,还包含希腊字母,俄文字母,阿拉伯语字母,英语字母等),有象形文字等。
计算机当时是由美国第一个发明的,自然,美国就用了ASCII码表来进行编码。但是其他国家也有使用计算机的强烈需求。当时ASCII码表使用了8bit,只使用了0~127,剩余的数值128~255就被各个国家拿来扩展了。这就是ASCII码表扩展表
所以,在俄国,你会发现,这些扩展ASCII码表128~255的数字对应的是俄文字符。
在希腊,ASCII扩展表对应的是希腊字母
在阿拉伯,ASCII扩展表对应的是阿拉伯语字符。
我们中国两万多个汉字呢,这个太少了,不利于我们扩展,所以我们指定了GBK标准(当然前期制定的是GB2312标准,后来扩展为GBK标准了,GBK标准后面应该也是继续扩展了)
2、各个国家各自为战,那很明显是不行的。世界上有几百个国家,就有几百个标准!!!
所以发明了一个Unicode编码表。按照上文unique-code的理解。这个Unicode编码表叫做唯一编码表。也就是说,全世界不管什么国家,只用使用了Unicode编码表,就能在电脑上显示你们这个国家的字符。所以叫唯一编码表。
当然,中国人翻译的时候,翻译成了万国编码表,也有的翻译成了统一编码表。
一个意思。
其实Unicode编码表,就是跟上文GBK编码表是一个原理,就是为这个字符建立一一映射关系。
比如:(下面的例子是假设的,不是真的Unicode的编码值)
数值1000对应希腊字母α
1002对应希腊字母β
2001对应汉字“我”
2002对应汉字“你”
1000001对应俄文字母XXX
1000002对应俄文字母YYY
这个所谓的一一映射关系,在计算机行业里面取了一个好听的名字,叫做编码
3、一直提所谓的ASCII码
ASCII码的全称是:American Standard Code for Information Interchange
很明显,ASCII的A就是美国的意思,也就是说,这个是美国的标准。美国的标准不代表是全世界的标准,只不过是由于大家都在学英语,必须掌握英文字符,所以大家就都学了ASCII码表
4、UniCode编码方法:
想要了解UniCode的编码方法,先参考这个博文:
GBK编码的理解_sgmcy的博客-CSDN博客
GBK编码的时候,把那么多汉字,拆分成了一个个的小块(小卡片),每个小卡片左上角有个标号(标号范围是0x81~0xFE),然后再根据行和列,确定汉字的下一个标号,完成编码。
所以GBK编码有16bit。前一个字节标明了小卡片的号码,后一个字节标明了汉字在这个小卡片中的行和列。
UniCode的编码原理与GBK编码类似。GBK编码采用了24bit来进行编码,编码范围是0x000000~0x10FFFF。
其中第一个字节的取值范围只能是0x00~0x10(总共17个)。Unicode取了一个名字,叫“面”,page.
然后后面两个字节就是放了65536个字符。
也就是说,Unicode新建了17个页面,然后规定,每个页面里面放一些字符。最多放65536个。
比如,假设:
第一个界面放中文字符。
第二个界面放英文字符。
第三个界面放俄文字符。
第四个界面放希腊字符。
。。。。
当然实际上会有一些微调。比如,中文才两万多个汉字,用一个可以存放6.5万个字符的界面光光放汉字,有点太可惜了,所以可能会将日文,韩文,以及一些其他的中文标点符号什么的,也放进去,整合成一个界面(page)
再比如,英文字符总共才那么多,127个而已,那么会把相同的一些字符,英国的,俄国的,西班牙的什么的字符,那些跟英语语法相近的字符,放在一个page里面。
实际上,有些平面还未完全填充满,还留着给以后扩展使用呢。
Unicode的大概编码原理就如上图显示。就完成了编码。
比如,汉字“花” ,Unicode编码值是\u82b1 ,其中\u 代表是Unicode编码,82b1的值,就是Unicode编码的16进制值。很明显,汉字“花”,24bit的第一个字节是00,所以汉字花在第一个page页里面。
注意,Unicode的编码值,跟国标码的编码值,是不一样的。