Unicode编码

Posted 海枫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unicode编码相关的知识,希望对你有一定的参考价值。

Unicode编码

 

作者:林海枫

网址:http://blog.csdn.net/linyt/archive/2008/12/08/3477866.aspx

[]:文章版权为作者所有,欢迎转载,但请完整转载并注明作者和完整地址,请勿用于任何商业用途。

 

什么是Unicode(统一码)?

Unicode给每个字符提供了一个唯一的数字,
不论是什么平台,
不论是什么程序,

不论是什么语言。



本文的Unicode编码就是指Unicode为每个字符分配一个唯一数字这一规则,但并不涉及这任何字符对应数字是如何储存的,它将会在Unicode编码形式方面表述。


1. Unicode简介与历史

 

Unicode(统 一码 、万国码和单 一码 )是目前为止包含字符文字最多的一种编码方案或字符集,它几乎为全球每种语言文字分配了唯一的字符编码。它由Unicode协会http://www.unicode.org/组织进行开发,编码和实现。到目前为止,最新的Unicode标准版本为Unicode5.1, 20084月发布。Unicode的出现,使得一直已久的编码问题得以解决,不同语言文字都有唯一的编码,字符间不会造成混乱,以满足跨语言、跨平台进行文转换、处理要求。

Unicode项目始建于1988年,由几个软件公司协作开发而成的单一字符集编码标准(single character set encoding standard),支持全球所有的文字。于19911月,Unicode项目形成一个新的组织为Unicode协会(Consortium),负责Unicode的开发,编码和实现和标准和方案,同年8月发布Unicode标准1.0

无独有偶,一个名为ISO/IEC工作组于1984年成立,开始专注开发国际化字符集,支持全球所有语言的文字。该字符集命名为Universal Character Set(UCS), 1989年发布UCS标准草案。

这两个组织都致力于构造一种通用的编码方案和实现,但它们的字符集都不能兼容,这样两个标准使人们混乱。ISO/IECUnicode协会意识到这一点,1991开始合并这两个标准。合并过程出现一些需要协商的问题,首先是ISO/IEC标准处于草案阶段而Unicode1.0标准已经发布了;还有就是Unicode被设计为统一的16位编码方案,最多可包含 65536个字符,而ISO/IEC标准使用31位编码方案,可包含多达20亿个字符。

 

2. Unicode编码

 

计算机历史上最早的编码方案应该是ASCII码,它采用整数[0,127]对字符进行编码。每个ASCII字符数值不超过127,因此采用一个字节就可以储存字符。由此编码空间(codespace)为0127ASCII字符集中包含了英文字母、数字、符号和控制字符。

定义:

Codespace(编码空间):给字符集所有字符分配的整数集。

Codepoint(代码)codespace中的任一个数值都称为codepoint

 

由于ASCII码只能表示全球文字的极少一部分,因此Unicode为了能容纳全球所有语言的文字,必须有一个更大的codespace。在早期Unicode 标准未和ISO/ICE标准合并提时,Unicode使用16位(2字节)整数的codespace

Unicode编码字符集给每个字符分配了一个整数值,该整数值与Unicode字符集中的字符相对应,该整数有个特别称谓为Unicode scalar values(USVs);并且每个字符的USV和它对应的Codepoint是同一个数值,这里两个术语不进行区分,但后者最为常用。根据Unicode约定,Codepoint“U+”开始,紧接着它对应的十六进制数表示,若不足四位则以0补齐。如“U+ 0345” “U+ 10345” “U+ 20345” 等等。

在新的Unicode标准中,它的codespaceU+0000U+10FFFF,空间大小为17*64K。在与ISO/IEC标准的合并过程出现的问题, Unicode提出了平面(Plane)的概念。Unicode[U+0000, U+10FFFF]空间均等地划分成17块,每块称为一个平面,并以0作为开始编号进行命名。[U+0000, U+FFFF]所在的Plane称为Plane 0, [U+10000, U+1FFFF]所在的plane称为Plane 1, 依次类推。

早期的Unicode使用统一的16位编码,并且能够表示全球所有语言的文字,以及这些字符ISO/IEC字符集对应的字符进一致。早期16编码字符刚好在Plane 0里面,故UnicodePlane 0命名为Basic Multilingual Plane(BMP)。余下的Plane 1Plane 16称为Supplementary Planes。新标准Unicode的很大部分codepoint需要用超过2个节字(这里仅指表示,而非存诸codepoint或它对它的字符),但全球所有语言文字都位于BMP中,它可以满足我们多语言的处理,因此全球语言文字使用2个字节就可以表示了。

到目前为止,并不是每个Codepoint分配给字符的,因此Codespace存在很多真空”codepoint。具体如下:

1)每个Plane都有两个codepoint为非字符,它们是U+nFFFEU+nFFFF(这里n表示从010的十六进制数)。

2)从U+D800U+DFFFF2048codepoint为非字符。这些codepoint之所以不分配,是这些数值会由UTF-16 实现来使用,以免传输和储存过程出现冲突。

3)从标准TUS 3.1开始,Unicode保留32个字符U+FDD0..U+FDEF为非字符,便于程序用于特殊用途。

17plane中,一共包含1114112codepoint。除去66个(21732)为非字符, 2048个保留字符,Unicode space一共包含了1111988个可分配字符。

 

3. Unicode Planes结构与内容

 

Unicode字符集可以根据多种方式分类,但Unicode codespace逻辑上被划分成17Plane, 每个Plane包含65536(2^16)codepoint, 尽管如此,仍然只有少量的Plane被使用。当前Plane的划分和使用情况如下:

1Plane 0(U+0000-U+FFFF)

命名为基本多文平面(Basic Multilingual Plane, BMP)。从目前来说,Unicode分配的所有字符中,大部分字符都位于MBP。它包含了早期Unicode(合并前)所分配的字符和全球当前所有语言使用的书写文字。

2Plane 1(U+10000-U+1FFFF)

命名为辅助多文平面(Supplementary Multilingual Plane, SMP)

3Plane 2 (U+20000-U+2FFFF)

命名为表意文字补充平面(Supplementary Ideographic Plane, SIP)

4Planes 3 to 13(U+30000-U+DFFFF)

保留,未分配。

5Plane 14 UE0000UEFFFF

命名为特殊用途补充平面(Supplementray Special-purpose Plane, SSP)。

6 Plane 15 UF0000UFFFFF

命名为私有使用区(Private Use Area, PUA

7 Plane 16 U+100000-U10FFFF)

命名为私有使用区(Private User Area, PUA),保留。

 

3.1 基本多文平面(BMP

 

Unicode中第一个平面,通常称为基本多文平面(Basic Multilingual Plane, BMP), 它几乎包含了所有现代语言文字和大量特殊字符;此中很大部分分配给中文、日文和韩文文字(称为CJK)。在Unicode 5.1标准中,BMP所包含的字符如下:

 

·                       Basic Latin (0000– 007F )

·                       Latin-1 Supplement (0080–00FF)

·                       Latin Extended-A (0100– 017F )

·                       Latin Extended-B (0180– 024F )

·                       IPA Extensions (0250–02AF)

·                       Spacing Modifier Letters (02B0–02FF)

·                       Combining Diacritical Marks (0300– 036F )

·                       Greek and Coptic (0370–03FF)

·                       Cyrillic (0400–04FF)

·                       Cyrillic Supplement (0500– 052F )

·                       Armenian (0530– 058F )

·                       Hebrew (0590–05FF)

·                       Arabic (0600–06FF)

·                       Syriac (0700– 074F )

·                       Arabic Supplement (0750– 077F )

·                       Thaana (0780–07BF)

·                       N'Ko (Mandenkan) ( 07C 0–07FF)

·                       Indic scripts:

o                                    Devanagari (0900– 097F )

o                                    Bengali (0980–09FF)

o                                    Gurmukhi ( 0A 00– 0A 7F )

o                                    Gujarati ( 0A 80–0AFF)

o                                    Oriya (0B00–0B 7F )

o                                    Tamil (0B80–0BFF)

o                                    Telugu ( 0C 00– 0C 7F )

o                                    Kannada ( 0C 80–0CFF)

o                                    Malayalam (0D00–0D 7F )

o                                    Sinhala (0D80–0DFF)

·                       Thai (0E00–0E 7F )

·                       Lao (0E80–0EFF)

·QT unicode编码问题

js 将 unicode编码转换中文2种方式

java 自动处理unicode编码

ASCII编码和Unicode编码

java如何把以unicode编码形式的字符串变成编码前的形式

给钱破解JS中的 unicode 编码!!!谢谢!