unicode_unicodeencodeerror - CSDN
精华内容
参与话题
  • Unicode

    千次阅读 2015-08-11 10:50:40
    Unicode Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨...

    Unicode

    Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。[1] 
    中文名
    外文名
    Unicode
    也    称
    万国码

    1起源编辑

    Unicode 是为了解决传统的字符编码方案的局限而产生的,例如ISO 8859所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况。很多传统的编码方式都有一个共同的问题,即容许电脑处理双语环境(通常使用拉丁字母以及其本地语言),但却无法同时支持多语言环境(指可同时处理多种语言混合的情况)。
    Unicode 编码包含了不同写法的字,如“ɑ/a”、“户/户/戸”。然而在汉字方面引起了一字多形的认定争议(详见中日韩统一表意文字主题)。
    在文字处理方面,统一码为每一个字符而非字形定义唯一的代码(即一个整数)。换句话说,统一码以一种抽象的方式(即数字)来处理字符,并将视觉上的演绎工作(例如字体大小、外观形状、字体形态、文体等)留给其他软件来处理,例如网页浏览器或是文字处理器。
    几乎所有电脑系统都支持基本拉丁字母,并各自支持不同的其他编码方式。Unicode为了和它们相互兼容,其首256字符保留给ISO 8859-1所定义的字符,使既有的西欧语系文字的转换不需特别考量;并且把大量相同的字符重复编到不同的字符码中去,使得旧有纷杂的编码方式得以和Unicode编码间互相直接转换,而不会丢失任何信息。举例来说,全角格式区段包含了主要的拉丁字母的全角格式,在中文、日文、以及韩文字形当中,这些字符以全角的方式来呈现,而不以常见的半角形式显示,这对竖排文字和等宽排列文字有重要作用。
    在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。在基本多文种平面(英文为 Basic Multilingual Plane,简写 BMP。它又简称为“零号平面”, plane 0)里的所有字符,要用四位十六进制数(例如U+4AE0,共支持六万多个字符);在零号平面以外的字符则需要使用五位或六位十六进制数了。旧版的Unicode标准使用相近的标记方法,但却有些微的差异:在Unicode 3.0里使用“U-”然后紧接着八位数,而“U+”则必须随后紧接着四位数。[1] 

    2作用编辑

    能够使计算机实现跨语言、跨平台的文本转换及处理。

    3层次编辑

    Unicode 编码系统,可分为编码方式和实现方式两个层次。

    4方式编辑

    Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8UTF-16UTF-32都是将数字转换到程序数据的编码方案。
    通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。
    历史上存在两个独立的尝试创立单一字符集的组织,即国际标准化组织(ISO)和多语言软件制造商组成的统一码联盟。前者开发的 ISO/IEC 10646 项目,后者开发的统一码项目。因此最初制定了不同的标准。
    1991年前后,两个项目的参与者都认识到,世界不需要两个不兼容的字符集。于是,它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode 2.0开始,Unicode采用了与ISO 10646-1相同的字库和字码;ISO也承诺,ISO 10646将不会替超出U+10FFFF的UCS-4编码赋值,以使得两者保持一致。两个项目仍都存在,并独立地公布各自的标准。但统一码联盟和ISO/IEC JTC1/SC2都同意保持两者标准的码表兼容,并紧密地共同调整任何未来的扩展。在发布的时候,Unicode一般都会采用有关字码最常见的字型,但ISO 10646一般都尽可能采用Century字型。
    UCS-4根据最高位为0的最高字节分成27=128个group。每个group再根据次高字节分为256个平面(plane)。每个平面根据第3个字节分为256行 (row),每行有256个码位(cell)。group 0的平面0被称作BMP(Basic Multilingual Plane)。如果UCS-4的前两个字节为全零,那么将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。每个平面有216=65536个码位。Unicode计划使用了17个平面,一共有17×65536=1114112个码位。在Unicode 5.0.0版本中,已定义的码位只有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。其中平面15和平面16上只是定义了两个各占65534个码位的专用区(Private Use Area),分别是0xF0000-0xFFFFD和0x100000-0x10FFFD。所谓专用区,就是保留给大家放自定义字符的区域,可以简写为PUA。
    平面0也有一个专用区:0xE000-0xF8FF,有6400个码位。平面0的0xD800-0xDFFF,共2048个码位,是一个被称作代理区(Surrogate)的特殊区域。代理区的目的用两个UTF-16字符表示BMP以外的字符。在介绍UTF-16编码时会介绍。
    如前所述在Unicode 5.0.0版本中,238605-65534*2-6400-2048=99089。余下的99089个已定义码位分布在平面0、平面1、平面2和平面14上,它们对应着Unicode定义的99089个字符,其中包括71226个汉字。平面0、平面1、平面2和平面14上分别定义了52080、3419、43253和337个字符。平面2的43253个字符都是汉字。平面0上定义了27973个汉字。
    在Unicode中:汉字“字”对应的数字是23383(十进制),十六进制表示为5B57。在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8UTF-16UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是:
    1
    2
    3
    chardata_utf8[]={0xE6,0xB1,0x89,0xE5,0xAD,0x97};//UTF-8编码
    char16_tdata_utf16[]={0x6C49,0x5B57};//UTF-16编码
    char32_tdata_utf32[]={0x00006C49,0x00005B57};//UTF-32编码
    这里用char、char16_t、char32_t分别表示无符号8位整数,无符号16位整数和无符号32位整数。UTF-8、UTF-16、UTF-32分别以char、char16_t、char32_t作为编码单位。(注: char16_t 和 char32_t 是 C++ 11 标准新增的关键字。如果你的编译器不支持 C++ 11 标准,请改用 unsigned short 和 unsigned long。)“汉字”的UTF-8编码需要6个字节。“汉字”的UTF-16编码需要两个char16_t,大小是4个字节。“汉字”的UTF-32编码需要两个char32_t,大小是8个字节。根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。下面介绍UTF-8、UTF-16、UTF-32、字节序和BOM。[1] 

    UTF-8

    UTF-8以字节为单位对Unicode进行编码。从Unicode到UTF-8的编码方式如下:
    Unicode编码(十六进制) 
    UTF-8 字节流(二进制)
    00000000 - 0000007F
    0xxxxxxx
    00000080 - 000007FF
    110xxxxx 10xxxxxx
    00000800 - 0000FFFF
    1110xxxx 10xxxxxx 10xxxxxx
    00010000 - 001FFFFF
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    00200000 - 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    04000000 - 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是6个字节。从上表可以看出,6字节模板有31个x,即可以容纳31位二进制数字。Unicode的最大码位0x7FFFFFFF也只有31位。
    例1:“汉”字的Unicode编码是0x6C49。0x6C49在0x0800-0xFFFF之间,使用用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
    例2:Unicode编码0x20C30在0x010000-0x10FFFF之间,使用用4字节模板了:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。将0x20C30写成21位二进制数字(不足21位就在前面补0):0 0010 0000 1100 0011 0000,用这个比特流依次代替模板中的x,得到:11110000 10100000 10110000 10110000,即F0 A0 B0 B0。

    UTF-16

    UTF-16编码以16位无符号整数为单位。我们把Unicode
    unicodeunicode
    编码记作U。编码规则如下:
    如果U<0x10000,U的UTF-16编码就是U对应的16位无符号整数(为书写简便,下文将16位无符号整数记作WORD)。
    如果U≥0x10000,我们先计算U'=U-0x10000,然后将U'写成二进制形式:yyyy yyyy yyxx xxxx xxxx,U的UTF-16编码(二进制)就是:110110yyyyyyyyyy 110111xxxxxxxxxx。
    为什么U'可以被写成20个二进制位?Unicode的最大码位是0x10ffff,减去0x10000后,U'的最大值是0xfffff,所以肯定可以用20个二进制位表示。例如:Unicode编码0x20C30,减去0x10000后,得到0x10C30,写成二进制是:0001 0000 1100 0011 0000。用前10位依次替代模板中的y,用后10位依次替代模板中的x,就得到:1101100001000011 1101110000110000,即0xD843 0xDC30。
    按照上述规则,Unicode编码0x10000-0x10FFFF的UTF-16编码有两个WORD,第一个WORD的高6位是110110,第二个WORD的高6位是110111。可见,第一个WORD的取值范围(二进制)是11011000 00000000到11011011 11111111,即0xD800-0xDBFF。第二个WORD的取值范围(二进制)是11011100 00000000到11011111 11111111,即0xDC00-0xDFFF。
    为了将一个WORD的UTF-16编码与两个WORD的UTF-16编码区分开来,Unicode编码的设计者将0xD800-0xDFFF保留下来,并称为代理区(Surrogate):
    D800-DB7F
    High Surrogates
    高位替代
    DB80-DBFF
    High Private Use Surrogates
    高位专用替代
    DC00-DFFF
    Low Surrogates
    低位替代
    高位替代就是指这个范围的码位是两个WORD的UTF-16编码的第一个WORD。低位替代就是指这个范围的码位是两个WORD的UTF-16编码的第二个WORD。那么,高位专用替代是什么意思?我们来解答这个问题,顺便看看怎么由UTF-16编码推导Unicode编码。
    如果一个字符的UTF-16编码的第一个WORD在0xDB80到0xDBFF之间,那么它的Unicode编码在什么范围内?我们知道第二个WORD的取值范围是0xDC00-0xDFFF,所以这个字符的UTF-16编码范围应该是0xDB80 0xDC00到0xDBFF 0xDFFF。我们将这个范围写成二进制:
    1101101110000000 11011100 00000000 - 1101101111111111 1101111111111111
    按照编码的相反步骤,取出高低WORD的后10位,并拼在一起,得到
    1110 0000 0000 0000 0000 - 1111 1111 1111 1111 1111
    XMLXML
    即0xe0000-0xfffff,按照编码的相反步骤再加上0x10000,得到0xf0000-0x10ffff。这就是UTF-16编码的第一个WORD在0xdb80到0xdbff之间的Unicode编码范围,即平面15和平面16。因为Unicode标准将平面15和平面16都作为专用区,所以0xDB80到0xDBFF之间的保留码位被称作高位专用替代[1] 

    UTF-32

    UTF-32编码以32位无符号整数为单位。Unicode的UTF-32编码就是其对应的32位无符号整数。

    字节序

    字节序有两种,分别是“大端”(Big Endian, BE)和“小端”(Little Endian, LE)。
    根据字节序的不同,UTF-16可被实现为UTF-16LE或UTF-16BE,UTF-32可被实现为UTF-32LE或UTF-32BE。例如:
    Unicode编码
    UTF-16LE 
    UTF-16BE 
    UTF32-LE 
    UTF32-BE
    0x006C49
    49 6C
    6C 49
    49 6C 00 00
    00 00 6C 49
    0x020C30
    43 D8 30 DC
    D8 43 DC 30
    30 0C 02 00
    00 02 0C 30
    Unicode标准建议用BOM(Byte Order Mark)来区分字节序,即在传输字节流前,先传输被作为BOM的字符“零宽无中断空格”。这个字符的编码是FEFF,而反过来的FFFE(UTF-16)和FFFE0000(UTF-32)在Unicode中都是未定义的码位,不应该出现在实际传输中。
    下表是各种UTF编码的BOM:
    UTF编码
    Byte Order Mark (BOM)
    UTF-8 without BOM
    UTF-8 with BOM
    EF BB BF
    UTF-16LE
    FF FE
    UTF-16BE
    FE FF
    UTF-32LE
    FF FE 00 00
    UTF-32BE
    00 00 FE FF

    5分布编辑

    Unicode 到目前为止所定义的五个平面中,第0平面(BMP)最为重要,其编码分布如下:
    注:中文范围 4E00-9FBF:CJK 统一表意符号 (CJK Unified Ideographs)
    0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic Latin)
    0080-00FF:C1控制符及拉丁文补充-1 (C1 Control and Latin 1 Supplement)
    0100-017F:拉丁文扩展-A (Latin Extended-A)
    0180-024F:拉丁文扩展-B (Latin Extended-B)
    0250-02AF:国际音标扩展 (IPA Extensions)
    02B0-02FF:空白修饰字母 (Spacing Modifiers)
    0300-036F:结合用读音符号 (Combining Diacritics Marks)
    0370-03FF:希腊文及科普特文 (Greek and Coptic)
    Microsoft WordMicrosoft Word
    0400-04FF:西里尔字母(Cyrillic)
    0500-052F:西里尔字母补充 (Cyrillic Supplement)
    0530-058F:亚美尼亚语 (Armenian)
    0590-05FF:希伯来文 (Hebrew)
    0600-06FF:阿拉伯文 (Arabic)
    0700-074F:叙利亚文 (Syriac)
    0750-077F:阿拉伯文补充 (Arabic Supplement)
    0780-07BF:马尔代夫语 (Thaana)
    07C0-077F:西非书面语言 (N'Ko)
    0800-085F:阿维斯塔语及巴列维语(Avestan and Pahlavi)
    0860-087F:Mandaic
    0880-08AF:撒马利亚语 (Samaritan)
    0900-097F:天城文书 (Devanagari)
    0980-09FF:孟加拉语 (Bengali)
    0A00-0A7F:锡克教文 (Gurmukhi)
    0A80-0AFF:古吉拉特文 (Gujarati)
    0B00-0B7F:奥里亚文 (Oriya)
    0B80-0BFF:泰米尔文 (Tamil)
    0C00-0C7F:泰卢固文 (Telugu)
    0C80-0CFF:卡纳达文 (Kannada)
    0D00-0D7F:德拉维族语 (Malayalam)
    0D80-0DFF:僧伽罗语 (Sinhala)
    0E00-0E7F:泰文 (Thai)
    0E80-0EFF:老挝文 (Lao)
    0F00-0FFF:藏文 (Tibetan)
    1000-109F:缅甸语 (Myanmar)
    10A0-10FF:格鲁吉亚语(Georgian)
    1100-11FF:朝鲜文 (Hangul Jamo)
    1200-137F:埃塞俄比亚语 (Ethiopic)
    1380-139F:埃塞俄比亚语补充 (Ethiopic Supplement)
    13A0-13FF:切罗基语 (Cherokee)
    1400-167F:统一加拿大土著语音节 (Unified Canadian Aboriginal Syllabics)
    1680-169F:欧甘字母 (Ogham)
    16A0-16FF:如尼文(Runic)
    1700-171F:塔加拉语 (Tagalog)
    1720-173F:Hanunóo
    1740-175F:Buhid
    1760-177F:Tagbanwa
    1780-17FF:高棉语 (Khmer)
    1800-18AF:蒙古文 (Mongolian)
    18B0-18FF:Cham
    1900-194F:Limbu
    1950-197F:德宏泰语 (Tai Le)
    1980-19DF:新傣仂语 (New Tai Lue)
    19E0-19FF:高棉语记号 (Kmer Symbols)
    1A00-1A1F:Buginese
    1A20-1A5F:Batak
    1A80-1AEF:Lanna
    1B00-1B7F:巴厘语 (Balinese)
    1B80-1BB0:巽他语 (Sundanese)
    1BC0-1BFF:Pahawh Hmong
    1C00-1C4F:雷布查语(Lepcha)
    1C50-1C7F:Ol Chiki
    1C80-1CDF:曼尼普尔语(Meithei/Manipuri)
    1D00-1D7F:语音学扩展 (Phonetic Extensions)
    1D80-1DBF:语音学扩展补充 (Phonetic Extensions Supplem
    unicodeunicode
    ent)
    1DC0-1DFF:结合用读音符号补充 (Combining Diacritics Marks Supplement)
    1E00-1EFF:拉丁文扩充附加 (Latin Extended Additional)
    1F00-1FFF:希腊语扩充 (Greek Extended)
    2000-206F:常用标点(General Punctuation)
    2070-209F:上标及下标 (Superscripts and Subscripts)
    20A0-20CF:货币符号 (Currency Symbols)
    20D0-20FF:组合用记号 (Combining Diacritics Marks for Symbols)
    2100-214F:字母式符号 (Letterlike Symbols)
    2150-218F:数字形式 (Number Form)
    2190-21FF:箭头 (Arrows)
    2200-22FF:数学运算符 (Mathematical Operator)
    2300-23FF:杂项工业符号 (Miscellaneous Technical)
    2400-243F:控制图片 (Control Pictures)
    2440-245F:光学识别符 (Optical Character Recognition)
    2460-24FF:封闭式字母数字 (Enclosed Alphanumerics)
    2500-257F:制表符 (Box Drawing)
    2580-259F:方块元素 (Block Element)
    25A0-25FF:几何图形 (Geometric Shapes)
    2600-26FF:杂项符号 (Miscellaneous Symbols)
    2700-27BF:印刷符号 (Dingbats)
    27C0-27EF:杂项数学符号-A (Miscellaneous Mathematical Symbols-A)
    27F0-27FF:追加箭头-A (Supplemental Arrows-A)
    2800-28FF:盲文点字模型 (Braille Patterns)
    2900-297F:追加箭头-B (Supplemental Arrows-B)
    2980-29FF:杂项数学符号-B (Miscellaneous Mathematical Symbols-B)
    2A00-2AFF:追加数学运算符 (Supplemental Mathematical Operator)
    2B00-2BFF:杂项符号和箭头 (Miscellaneous Symbols and Arrows)
    2C00-2C5F:格拉哥里字母(Glagolitic)
    2C60-2C7F:拉丁文扩展-C (Latin Extended-C)
    2C80-2CFF:古埃及语 (Coptic)
    2D00-2D2F:格鲁吉亚语补充 (Georgian Supplement)
    2D30-2D7F:提非纳文 (Tifinagh)
    2D80-2DDF:埃塞俄比亚语扩展 (Ethiopic Extended)
    2E00-2E7F:追加标点 (Supplemental Punctuation)
    2E80-2EFF:CJK 部首补充 (CJK Radicals Supplement)
    2F00-2FDF:康熙字典部首 (Kangxi Radicals)
    2FF0-2FFF:表意文字描述符 (Ideographic Description Characters)
    3000-303F:CJK 符号和标点 (CJK Symbols and Punctuation)
    3040-309F:日文平假名 (Hiragana)
    30A0-30FF:日文片假名 (Katakana)
    3100-312F:注音字母 (Bopomofo)
    3130-318F:朝鲜文兼容字母 (Hangul Compatibility Jamo)
    3190-319F:象形字注释标志 (Kanbun)
    31A0-31BF:注音字母扩展 (Bopomofo Extended)
    31C0-31EF:CJK 笔画 (CJK Strokes)
    31F0-31FF:日文片假名语音扩展 (Katakana Phonetic Extensions)
    3200-32FF:封闭式 CJK 文字和月份 (Enclosed CJK Letters and Months)
    3300-33FF:CJK 兼容 (CJK Compatibility)
    3400-4DBF:CJK 统一表意符号扩展 A (CJK Unified Ideographs Extension A)
    4DC0-4DFF:易经六十四卦符号 (Yijing Hexagrams Symbols)
    4E00-9FBF:CJK 统一表意符号 (CJK Unified Ideographs)
    A000-A48F:彝文音节 (Yi Syllables)
    A490-A4CF:彝文字根 (Yi Radicals)
    A500-A61F:Vai
    A660-A6FF:统一加拿大土著语音节补充 (Unified Canadian Aboriginal Syllabics Supplement)
    A700-A71F:声调修饰字母 (Modifier Tone Letters)
    A720-A7FF:拉丁文扩展-D (Latin Extended-D)
    A800-A82F:Syloti Nagri
    A840-A87F:八思巴字 (Phags-pa)
    A880-A8DF:Saurashtra
    A900-A97F:爪哇语 (Javanese)
    A980-A9DF:Chakma
    AA00-AA3F:Varang Kshiti
    AA40-AA6F:Sorang Sompeng
    AA80-AADF:Newari
    AB00-AB5F:越南傣语 (Vi?t Thái)
    AB80-ABA0:Kayah Li
    AC00-D7AF:朝鲜文音节 (Hangul Syllables)
    D800-DBFF:High-half zone of UTF-16
    DC00-DFFF:Low-half zone of UTF-16
    E000-F8FF:自行使用区域 (Private Use Zone)
    F900-FAFF:CJK 兼容象形文字 (CJK Compatibility Ideographs)
    FB00-FB4F:字母表达形式 (Alphabetic Presentation Form)
    FB50-FDFF:阿拉伯表达形式A (Arabic Presentation Form-A)
    FE00-FE0F:变量选择符 (Variation Selector)
    FE10-FE1F:竖排形式 (Vertical Forms)
    FE20-FE2F:组合用半符号 (Combining Half Marks)
    FE30-FE4F:CJK 兼容形式 (CJK Compatibility Forms)
    FE50-FE6F:小型变体形式 (Small Form Variants)
    FE70-FEFF:阿拉伯表达形式B (Arabic Presentation Form-B)
    FF00-FFEF:半型及全型形式 (Halfwidth and Fullwidth Form)
    FFF0-FFFF:特殊 (Specials)

    6环境编辑

    在非 Unicode 环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页(Codepage)转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码。可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式,如936为简体中文GBK,950为繁体中文Big5(皆指PC上使用的)。在这种情况下,一些非英语的欧洲语言编写的软件和文档很可能出现乱码。而将代码页设置为相应语言中文处理又会出现问题,这一情况无法避免。从根本上说,完全采用统一编码才是解决之道,但是Windows操作系统由于历史遗留原因尚无法做到这一点。
    代码页技术广泛为各种平台所采用。UTF-7 的代码页是65000,UTF-8 的代码页是65001。

    7字集编辑

    XML及其子集HTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用&#nnn;的格式显示特定的字符。nnn代表该字符的十进制 Unicode 代码。如果采用十六进制代码,在编码之前加上x字符即可。但部分旧版本的浏览器可能无法识别十六进制代码。
    然而部分由于Unicode 版本发展原因,很多浏览器只能显示UCS-2 完整字符集也即日常使用的Unicode 版本中的一个小子集。下表可以检验您的浏览器怎样显示各种各样的 Unicode 代码:

    8输入编辑

    综述

    除了输入法外,操作系统会提供几种方法输入Unicode。像是Windows 2000之后的Windows系统就提供一个可点击的表。例如在Microsoft Word或者金山WPS之下,按下Alt键不放,输入 0 和某个字符的 Unicode 编码(十进制),再松开 Alt 键即可得到该字符,如Alt + 033865会得到Unicode字符“叶”(繁体)。另外按Alt + X 组合键,MS Word 也会将光标前面的字符同其十六进制的四位 Unicode 编码进行互相转换。
    Unicode 编码表反弹
    0000-0FFF 8000-8FFF 10000-10FFF 20000-20FFF 28000-28FFF
    1000-1FFF 9000-9FFF 21000-21FFF 29000-29FFF
    2000-2FFF A000-AFFF 22000-22FFF 2A000-2AFFF
    3000-3FFF B000-BFFF 23000-23FFF
    4000-4FFF C000-CFFF 1D000-1DFFF 24000-24FFF 2F000-2FFFF
    5000-5FFF D000-DFFF 25000-25FFF
    6000-6FFF E000-EFFF 26000-26FFF
    7000-7FFF F000-FFFF 27000-27FFF E0000-E0FFF
    Unicode 已经有6.2版本。世界上有一大批计算机、语言学等科学家专门研究Unicode,Unicode标准已经不单是一个编码标准,还是记录人类语言文字资料的一个巨大的数据库,同时从事人类文化遗产的发掘和保护工作。
    对于中文而言,Unicode 16编码里面已经包含了GB18030里面的所有汉字(27484个字),Unicode标准准备把康熙字典的所有汉字放入到Unicode 32bit编码中。
    简单地说,Unicode扩展自ASCII字元集。在严格的ASCII中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而Unicode使用全16位元字元集。这使得Unicode能够表示世界上所有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。Unicode最初打算作为ASCII的补充,可能的话,最终将代替它。考虑到ASCII是电脑中最具支配地位的标准,所以这的确是一个很高的目标。
    Unicode影响到了电脑工业的每个部分,但也许会对作业系统和程序设计语言的影响最大。从这方面来看,我们已经上路了。Windows NT从底层支持Unicode(不幸的是,Windows 98只是小部分支援Unicode)。先天即被ANSI束缚的C程序设计语言通过对宽字元集的支持来支持Unicode。

    方法

    中文输入法截至2009年3月,可以使用微软拼音2003或2007版本海峰五笔9.3版本,新注音输入法 和 VimIM 进行输入。
    微软拼音 在输入法启动状态下,单击语言栏上的“功能菜单”按钮,指向“辅助输入法”即可发现“Unicode码输入方式”,利用它可以直接输入Unicode相应十六进制值的方式输入相应文字。例如中文“胥”输入“5066”,朝鲜语文字“셅”输入“c145”(不需要在前面加0x或x)。海峰五笔 此输入法已经直接支持透过五笔码输入方式输入Unicode内的任意中日韩汉字,但无法使用键入Unicode码的方式输入。例如汉字(Unicode部分)“㗎”为“keks”,CJK扩展B区的“㿱”为“iyho”和CJK扩展C区的“뇛”为“muih”。新注音输入法 在输入法启动状态时,打入键盘上的“多功能前导字符键”(及通用键盘上之“`”),第一次使用会弹出说明。输入Unicode字符“胥”则是在键盘上键入“`U5066”。而韩语中的“셅”,则输入“`UC145”。而要输入日语自制汉字“卡”,则是“`U5CE0”。VimIM 在 Vim 环境中,可以直接键入十进制或十六进制 Unicode 码。既不需要启动输入法,也不需要码表。
    日文输入法使用Microsoft IME 2007,可以在IME PAD里找到UNICODE的点击表。点击字符即可输入。选择字体可以预览字符效果。

    其他

    除了输入法外,操作系统也会提供另外几种方法输入 Unicode。像是Windows 2000之后的 Windows 系统就提供一个可点击的字符映射表。又或者在Microsoft Word下,按下 Alt 键不放,输入 0 和某个字符的 Unicode 编码(十进制),再松开 Alt 键即可得到该字符,如Alt + 033865会得到 Unicode 字符。另外按Alt + X 组合键,MS Word 也会将光标前面的字符,同其十六进制的四位Unicode 编码进行互相转换。
    新建文本也能输入、右键[1] 

    9使用编辑

    基本上,计算机只是处理数字。它们指定一个数字,来储存字母或其他字符。在创造Unicode之前,有数百种指定这些数字的编码系统。没有一个编码可以包含足够的字符:例如,单单欧洲共同体就需要好几种不同的编码来包括所有的语言。即使是单一种语言,例如英语,也没有哪一个编码可以适用于所有的字母,标点符号,和常用的技术符号。这些编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同的字符,或使用不同的数字代表相同的字符。任何一台特定的计算机(特别是服务器)都需要支持许多不同的编码,但是,不论什么时候数据通过不同的编码或平台之间,那些数据总会有损坏的危险。
    为什么使用Unicode其实原因很简单,因为Unicode比ANSI好用。 自从Windows2K开始,Win的系统内核开始完全支持并完全应用Unicode编写,所有ANSI字符在进入底层前,都会被相应的API转换成Unicode。所以,如果你一开始就使用Unicode,则可以减少转换的用时和RAM开销。 对于JAVA/.NET等这些“新”的语言来说,内置的字符串所使用的字符集已经完全是Unicode最重要的是,世界上大多数程序用的字符集都是Unicode,因为Unicode有利于程序国际化和标准化。

    10简史编辑

    1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。
    Unicode6.3版已发布(2013年11月)。在Unicode联盟网站上可以查看完整的6.3的核心规范。
    Unicode定义了大到足以代表人类所有可读字符的字符集。
    Java语言就用到了Unicode编码,从而实现了该语言的国际通用性。
    Unicode截至目前为止,共发布了以下多个版本:
    Unicode 1.0:1991年10月
    Unicode 1.0.1:1992年6月
    Unicode 1.1:1993年6月
    Unicode 2.0:1997年7月
    Unicode 2.1:1998年5月
    Unicode 2.1.2:1998年5月
    Unicode 3.0:1999年9月;涵盖了来自ISO 10646-1的十六比特通用字符集(UCS)基本多文种平面(Basic Multilingual Plane)
    Unicode 3.1:2001年3月;新增从ISO 10646-2定义的辅助平面(Supplementary Planes)
    Unicode 3.2:2002年3月
    Unicode 4.0:2003年4月
    Unicode 4.0.1:2004年3月
    Unicode 4.1:2005年3月
    Unicode 5.0:2006年7月
    Unicode 5.1:2008年4月
    Unicode 5.2:2009年10月
    Unicode 6.0:2010年10月
    Unicode 6.1:2012年1月31日
    Unicode 6.2:2012年9月
    Unicode 6.3:2013年11月19日
    Unicode 7.0:2014年6月15日
    Unicode 8.0:2015年6月(预计)

    11编码表编辑

    U+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
    4e00
    4e10
    4e20
    4e30 丿
    4e40
    4e50
    4e60
    4e70 乿
    4e80
    4e90
    4ea0
    4eb0 亿
    4ec0
    4ed0
    4ee0
    4ef0 仿
    4f00
    4f10
    4f20
    4f30 伿
    4f40
    4f50
    4f60
    4f70 使
    4f80
    4f90
    4fa0
    4fb0 便
    4fc0
    4fd0
    4fe0
    4ff0 俿
    5000
    5010
    5020 仿
    5030
    5040
    5050
    5060
    5070
    5080
    5090
    50a0
    50b0
    50c0
    50d0
    50e0
    50f0
    5100 亿
    5110
    5120
    5130
    5140
    5150
    5160
    5170
    5180
    5190
    51a0
    51b0
    51c0
    51D0
    51E0
    51F0
    5200
    5210
    5220
    5230
    5240
    5250
    5260
    5270
    5280
    5290
    52A0
    52B0
    52C0
    52D0
    52E0
    52F0
    5300
    5310
    5320
    5330
    5340
    5350
    5360
    5370
    5380
    5390
    53a0
    53b0
    53c0
    53d0
    53e0
    53f0
    5400
    5410
    5420
    5430
    5440
    5450
    5460
    5470
    5480
    5490
    54a0
    54b0
    54c0
    54d0
    54e0
    54f0
    5500
    5510
    5520
    5530
    5540
    5550
    5560
    5570
    5580
    5590
    55a0
    55b0
    55c0
    55d0
    55e0
    55f0
    5600
    5610
    5620
    5630
    5640
    5650
    5660
    5670
    5680
    5690
    56a0
    56b0
    56c0
    56d0
    56e0
    56f0
    5700
    5710
    5720
    5730
    5740
    5750
    5760
    5770
    5780
    5790
    57a0
    57b0
    57c0
    57d0
    57e0
    57f0
    5800
    5810
    5820
    5830
    5840
    5850
    5860
    5870
    5880
    5890
    58a0
    58b0
    58c0
    58d0
    58e0
    58f0 寿
    5900
    5910
    5920
    5930 夿
    5940
    5950
    5960
    5970 奿
    5980
    5990
    59a0
    59b0 妿
    59c0
    59d0
    59e0
    59f0 姿
    5a00
    5a10
    5a20
    5a30 娿
    5a40
    5a50
    5a60
    5a70 婿
    5a80
    5a90
    5aa0
    5ab0 媿
    5ac0
    5ad0
    5ae0
    5af0 嫿
    5b00
    5b10
    5b20
    5b30 嬿
    5b40
    5b50
    5b60
    5b70
    5b80
    5b90
    5ba0
    5bb0 宿
    5bc0
    5bd0
    5be0
    5bf0 寿
    5c00
    5c10
    5c20
    5c30 尿
    5c40
    5c50
    5c60
    5c70 屿
    5c80
    5c90
    5ca0
    5cb0 岿
    5cc0
    5cd0
    5ce0
    5cf0 峿
    5d00
    5d10
    5d20
    5d30 崿
    5d40
    5d50
    5d60
    5d70 嵿
    5d80
    5d90
    5da0
    5db0 屿 嶿
    5dc0 岿
    5dd0
    5de0
    5df0 巿
    5e00
    5e10
    5e20
    5e30 帿
    5e40
    5e50
    5e60
    5e70 广
    5e80
    5e90
    5ea0
    5eb0 庿
    5ec0
    5ed0
    5ee0 广
    5ef0 廿
    5f00
    5f10
    5f20
    5f30 弿
    5f40
    5f50
    5f60
    5f70
    5f80
    5f90
    5fa0
    5fb0 徿
    5fc0
    5fd0
    5fe0
    5ff0 忿
    6000 怀
    6010
    6020
    6030
    6040
    6050
    6060
    6070
    6080
    6090
    60a0
    60b0
    60c0
    60d0
    60e0
    60f0
    6100
    6110
    6120
    6130
    6140
    6150
    6160
    6170
    6180
    6190
    61a0
    61b0
    61c0
    61d0
    61e0
    61f0 怀
    6200
    6210
    6220
    6230
    6240
    6250
    6260
    6270
    6280
    6290
    62a0
    62b0
    62c0
    62d0
    62e0
    62f0
    6300
    6310
    6320
    6330
    6340
    6350
    6360
    6370
    6380
    6390
    63a0
    63b0
    63c0
    63d0
    63e0
    63f0
    6400
    6410
    6420
    6430
    6440
    6450
    6460
    6470
    6480
    6490
    64a0
    64b0
    64c0
    64d0
    64e0
    64f0
    6500
    6510
    6520
    6530
    6540
    6550
    6560
    6570
    6580