`
inshect
  • 浏览: 188967 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

unicode

阅读更多
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。

2006年6月的最新版本的 Unicode 是 2005年3月31日推出的Unicode 4.1.0 。另外,5.0 Beta已于2005年12月12日推出,以供各会员评价。


Unicode 的编码和实现

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

1.编码方式

Unicode 的编码方式与 ISO 10646 的通用字元集(亦称[通用字符集])(Universal Character Set,UCS)概念相对应,目前的用于实用的 Unicode 版本对应于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示 65,536(2的16次方) 个字符。基本满足各种语言的使用。实际上目前版本的 Unicode 尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。

上述16位 Unicode 字符构成基本多文种平面(Basic Multilingual Plane, 简称 BMP)。最新(但未实际广泛使用)的 Unicode 版本定义了16个辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。但事实上辅助平面字符仍然占用4字节编码空间,与 UCS-4 保持一致。未来版本会扩充到 ISO 10646-1 实现级别3,即涵盖 UCS-4 的所有字符。UCS-4 是一个更大的尚未填充完全的31位字符集,加上恒为0的首位,共需占据32位,即4字节。理论上最多能表示 2,147,483,648(2的31次方)个字符,完全可以涵盖一切语言所用的符号。

BMP 字符的 Unicode 编码表示为 U+hhhh,其中每个 h 代表一个十六进制数位。与 UCS-2 编码完全相同。对应的4字节 UCS-4 编码后两个字节一致,前两个字节的所有位均为0。

2.实现方式

Unicode 的实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同。Unicode 的实现方式称为Unicode转换格式(Unicode Translation Format,简称为 UTF)。

例如,如果一个仅包含基本7位ASCII字符的 Unicode 文件,如果每个字符都使用2字节的原 Unicode 编码传输,其第一字节的8位始终为0。这就造成了比较大的浪费。对于这种情况,可以使用 UTF-8 编码,这是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他 Unicode 字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为0或1进行识别。这样对以7位ASCII字符为主的西文文档就大大节省了编码长度(具体方案参见UTF-8)。类似的,对未来会出现的需要4个字节的辅助平面字符和其他 UCS-4 扩充字符,2字节编码的 UTF-16 也需要通过一定的算法进行转换。

再如,如果直接使用与 Unicode 编码一致(仅限于 BMP 字符)的 UTF-16 编码,由于每个址都不相同,Macintosh机和PC机上对字节顺序的理解是不一致的。这时同一字节流可能会被解释为不同内容,如编码为 U+594E 的字符“奎”同编码为 U+4E59 的“乙”就可能发生混淆。于是在 UTF-16 编码实现方式中使用了大尾序(big-endian)、小尾序(little-endian)的概念,以及BOM(Byte Order Mark)解决方案。(具体方案参见UTF-16)

此外 Unicode 的实现方式还包括 UTF-7、Punycode、CESU-8、SCSU、UTF-32等,这些实现方式有些仅在一定的国家和地区使用,有些则属于未来的规划方式。目前通用的实现方式是 UTF-16小尾序(BOM)、UTF-16大尾序(BOM)和 UTF-8。在微软公司Windows XP操作系统附带的记事本中,“另存为”对话框可以选择的四种编码方式除去非 Unicode 编码的 ANSI 外,其余三种“Unicode”、“Unicode big endian”和“UTF-8”即分别对应这三种实现方式。

目前辅助平面的工作主要集中在第二和第三平面的中日韩统一表意文字中,因此包括GBK、GB18030、Big5等简体中文、正体中文、日文、韩语以及越南字喃的各种编码与 Unicode 的协调性被重点关注。考虑到 Unicode 最终要涵盖所有的字符,从某种意义而言,这些编码方式也可视作 Unicode 的出现于其之前的既成事实的实现方式,如同ASCII及其扩展Latin-1一样,后两者的字符在16位 Unicode 编码空间中的编码第一字节各位全为0,第二字节编码与原编码完全一致。但上述东亚语言编码与 Unicode 编码的对应关系要复杂得多。


非 Unicode 环境

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

代码页技术现在广泛为各种平台所采用。UTF-7 的代码页是65000,UTF-8 的代码页是65001。


XML 和 Unicode


XML及其子集HTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用&#nnn;的格式显示特定的字符。nnn代表该字符的十进制 Unicode 代码。如果采用十六进制代码,在编码之前加上x字符即可。但部分旧版本的浏览器可能无法识别十六进制代码。

然而部分由于 Unicode 版本发展原因,很多浏览器只能显示 UCS-2 完整字符集也即现在使用的 Unicode 版本中的一个小子集。下表可以检验您的浏览器怎样显示各种各样的 Unicode 代码:

代码             字符标准名称 (英语)             在浏览器上的显示

A             大写拉丁字母"A"                         A

ß           小写拉丁字母"Sharp S"             ß

þ            小写拉丁字母"Thorn"               þ

Δ            大写希腊字母"Delta"                   Δ

Й            大写斯拉夫字母"Short I"             Й

ק            希伯来字母"Qof"                ק            

م             阿拉伯字母 "Meem"                            م

๗            泰文数字 7                        ๗

ቐ            埃塞俄比亚音节文字"Qha"               ቐ

あ             日语平假名 "A"                       あ

ア             日语片假名 "A"                       ア

叶             简体汉字 "叶"                        叶

叶             繁体汉字 "叶"                         叶

엽            韩国音节文字 " Yeob"                  엽


输入Unicode

除了输入法外,操作系统会提供几种方法输入Unicode。像是Windows 2000之后的Windows系统就提供一个可点击的表。例如在Microsoft Word之下,按下 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 目前已经有5.0版本。世界上有一大批计算机、语言学等科学家专门研究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。

自然,作为程式写作者,我们通常会面对许多繁重的工作。我已试图透过使本书中的所有程式「Unicode化」来减轻负担。其含义会随著本章对Unicode的讨论而清晰起来。    
分享到:
评论

相关推荐

    VB6读写Unicode_vb6_unicode_

    在VB6(Visual Basic 6)环境中,Unicode是一种字符编码标准,它定义了每个字符的二进制表示,包括世界上所有语言的字符。Unicode的使用能够处理多种语言的数据,使得软件具有更好的国际化和本地化能力。本文将深入...

    delphi的支持unicode的第三方控件 TMS Unicode

    **Delphi与Unicode** Delphi,作为一款强大的Object Pascal编程环境,自其早期版本就开始支持Unicode编码。Unicode是一种国际标准,旨在表示世界上几乎所有的字符集,包括但不限于拉丁字母、希腊字母、汉字、阿拉伯...

    最全 Unicode 编码表 5.0,带索引

    Unicode编码表是计算机行业中用于字符编码的一种标准,它为世界上大多数的文字系统提供了唯一的数字标识。Unicode标准是由Unicode联盟开发和维护的,用于映射字符到唯一的数字(也称为码点)。Unicode 5.0是该标准的...

    Unicode完整版表

    **Unicode编码:全球字符统一表示法** Unicode,全称统一码、万国码或单一码,是一种在计算机上表示文本的标准化系统。它的目标是为世界上所有的字符提供一个唯一的数字编码,使得各种语言和符号都能在不同的计算机...

    The Unicode Standard, Version 15.0

    "Unicode标准,版本15.0" Unicode标准是计算机industry中最重要的字符编码标准之一,最新版本为15.0。该标准规定了计算机中字符的编码方式,以便于不同语言和地区的字符可以在计算机中正确地表示和存储。 Unicode...

    js unicode 转换工具

    JavaScript(简称JS)是一种广泛用于前端开发的编程语言,它在处理字符串时,尤其是在与Unicode字符打交道时,有一些特殊的操作和技巧。Unicode是一种国际字符集,它包含了世界上几乎所有的文字和符号,使得跨语言的...

    各国文字Unicode编码范围

    Unicode编码是一种全球统一的字符编码标准,旨在为世界上所有语言的字符提供唯一的数字标识。它由Unicode联盟制定,包括了各种文字系统,如拉丁字母、汉字、日文、韩文、阿拉伯文等。通过Unicode编码,不同的计算机...

    Unicode转换成GBK

    ### Unicode转换成GBK知识点解析 #### 一、前言 在多语言环境下,字符编码转换是常见的需求之一。Unicode作为一种国际标准的字符编码方案,能够支持世界上几乎所有已知的文字系统,而GBK则是一种用于简体中文环境...

    让易语言支持Unicode

    不要在求官方支持Unicode啦自己完全能使得易语言支持Unicode 本源码Unicode播放音乐 Unicode文件名自己找,自己看源码,如果你问我界面不支持Unicode怎么解决那我想给你一拳,不会用UI?写代码最重要的是能傻瓜化就傻瓜...

    unicode与gbk双向转换编码表

    Unicode 和 GBK 是两种常见的字符编码标准,它们各自有着不同的特点和应用范围。本篇将详细阐述 Unicode 与 GBK 编码之间的关系、它们的工作原理以及如何进行双向转换。 Unicode 是一个全球性的字符集,它试图为...

    十进制与unicode互转

    本资源主要关注的是“十进制与Unicode”之间的转换,这在Java编程中尤其常见,因为Java使用Unicode作为其内部字符集。Unicode是一个包含世界上几乎全部字符的编码标准,而十进制则是我们日常计算中最常用的数制系统...

    C# 格式的ASCII到Unicode转化源码

    本文将深入探讨如何在C#中进行ASCII到Unicode的转化,以及相关编码转换的重要性。 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种基于拉丁字母的字符编码,它只包含128...

    Unicode码转中文和中文转Unicode码的最简便的方法

    Unicode码是一种国际标准字符编码,它能够表示世界上几乎所有的文字和符号,包括中文。Unicode码以16位或32位二进制形式存储每个字符,确保了不同语言间的兼容性和可交换性。中文转Unicode码和Unicode码转中文的过程...

    中英文与Unicode码互转

    《中英文与Unicode码互转》是一款非常实用的工具,主要功能是帮助用户将中文和英文字符转换成Unicode编码,反之亦然。Unicode是一种全球通用的字符编码标准,旨在为世界上所有的文字提供一个统一的表示方式,使得...

    汉字UNICODE互换工具.exe

    汉字UNICODE互换工具是一款专为处理汉字编码转换问题而设计的应用程序,它主要用于在不同的字符编码系统之间进行转换,确保在不同环境下汉字的正确显示和处理。在信息技术领域,尤其是在处理文本数据时,了解汉字...

    中文转化为unicode格式的方法类

    在编程领域,Unicode 是一种字符编码标准,它旨在表示世界上所有语言的文字,包括中文。Unicode 编码使得跨平台和跨语言的文本处理变得更加简单。本文将深入探讨如何将中文字符转换为 Unicode 格式,并介绍一个名为 ...

    GBK与Unicode码对照表.rar

    GBK编码和Unicode编码是两种广泛使用的字符编码标准,它们在处理中文字符时起着至关重要的作用。这篇内容将深入解析这两个编码系统,并介绍它们之间的对应关系。 首先,GBK编码是GB2312编码的扩展,是中华人民...

    VB unicode_ msgbox

    在IT领域,尤其是在编程语言的学习和应用中,Unicode是一个至关重要的概念。Unicode是一个字符编码标准,旨在为全球各种语言提供一个统一的字符集,确保所有字符都能被正确地表示和处理。VB(Visual Basic)是...

    Unicode汉字编码表(全)

    Unicode汉字编码表是全球计算机系统中用于表示汉字的标准编码之一,它在中文信息处理领域扮演着至关重要的角色。Unicode,全称统一码或万国码,是一个为所有字符集提供唯一数字标识的国际标准,旨在解决不同语言字符...

    TMS Unicode Component Pack

    **TMS Unicode Component Pack**是针对Delphi早期版本的一个组件包,它的主要目的是为了使2009年之前发布的Delphi版本能够支持Unicode编码。Unicode是一种广泛使用的字符编码标准,旨在涵盖全球几乎所有的文字系统,...

Global site tag (gtag.js) - Google Analytics