描述 (DESCRIPTION)

国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 包含所有别的字符集标准里的字符,并且保证了 互换兼容性 (round-trip compatibility), 也就是说,当一个字符串在 UCS 和任何别的字符集之间转换时, 转换表可以保证不会有信息丢失现象发生.

UCS 包含了表示几乎所有已知的语言所必需的字符.该字符集既包括那些使用扩展拉丁语的语言,也包括下面的这些语言: Greek, Cyrillic, Hebrew,Arabic, Armenian, Gregorian, Japanese, Chinese, Hiragana, Katakana, Korean, Hangul, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, alayam, Thai, Lao, Bopomofo,等等.而另外的语言,例如 Tibetian, Khmer, Runic, Ethiopian, Hieroglyphics, 各种 Indo-European 语言, 还有许多其他的语言, 正在被加入其中.1993 年发布该标准的时候, 还不清楚怎样才能对后面加入的这些语言中的大部分作更好的编码. 另外, 这些语言所需的字符, 以及由 TeX, PostScript, MS-DOS, Macintosh, Videotext, OCR, 还有很多字处理系统所提供的大量的图形, 印刷体, 数学和科学符号, 都已被包括进来, 还包括了一些特别编码以保证和所有其它已存在字符集标准的可逆转换兼容性.

UCS 标准 (ISO 10646) 描述了一个 31 位字符集的体系, 不过, 目前只使用了前面 65534 个编码位置 (0x0000-0xfffd, 它们被称为 基本多语言块 (Basic Multilingual Plane,BMP)), 分配给了字符, 而且我们估计只有那些很古怪的字符(比如. Hieroglyphics)为了专门的科学目的, 才会在将来的某个时候, 需要 16 位的 BMP 之外的部分.

从 0x0000 到 0x007f 之间的 UCS 字符和经典 US-ASCII 字符集是一样的, 而从 0x0000 到 0x00ff 之间的字符等于 ISO 8859-1 Latin-1 字符集.

组合字符 (COMBINING CHARACTERS)

一些 UCS 编码被分配给了 组合字符(combining characters). 这样的情形有点类似于打字机上的重音键. 一个组合字符只是给前面的字符添加一个重音. 在 UCS 里最重要的重音字符都有他们自己的编码, 不过, 组合字符机制允许给任一字符添加重音和其他的可识别记号. 组合字符总是跟在那些他们所修饰的字符后面. 例如,德语符号 Umlaut-A (带分音符的大写拉丁字母 A)既可以表示为 UCS 编码 0x00c4, 也可以用一个正常的"大写拉丁字母 A"后面跟一个"组合分音符号": 0x0041 0x0308 来表示.

实现级别 (IMPLEMENTATION LEVELS)

由于不是所有系统都支持象组合字符这样的高级机制, ISO 10646 指明了 UCS 的三种实现级别:

级别 1 (Level 1)
不支持组合字符和 Hangul Jamo 字符(朝鲜语的一种更复杂的专用的编码, Hangul 音节编码成两或三个亚字符).
级别 2 (Level 2)
类似于级别1, 却在一些语言里面也支持一些组合字符. (比如. Hebrew, Arabic, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugo, Kannada, Malayalam, Thai 和 Lao).
级别 3 (Level 3)
支持所有 UCS 字符.

Unicode 协会发布的 Unicode 1.1 标准和 ISO 10646 所描述的那样, 在第 3 执行级别只包括了 UCS (基本多语言块 Basic Multilingual Plane). Unicode 1.1 还为一些 ISO 10646 的字符定义加入了一些语义定义.

LINUX 下的 UNICODE (UNICODE UNDER LINUX)

在 Linux 下, 为了降低组合字符的实现复杂性, 目前只包括了执行级别 1 下的 BMP. 更高的执行级别更适合于专门的字处理格式, 而不是一个普通的系统字符集. 在 linux 下 C 的类型 wchar_t 是一个有符号位的 32 位整型并且其值解释为 UCS4 编码.

本地化设置指明系统字符编码是使用诸如 UTF-8 还是 ISO 8859-1这样的编码. 象库函数 wctomb, mbtowc, 或者 wprintf 就可以用于内部 wchar_t 字符及字符串与系统字符编码之间做转换.

私有区 (PRIVATE AREA)

BMP 里, 0xe000 到 0xf8ff 的范围被标准保留做私用因而永远不会被分配给任何字符. 对于 Linux 社区, 该私有区被再细分为可以被任何终端用户独立使用的 0xe000 到 0xefff 的范围, 以及从 0xf000 到 0xf8ff 给所有 linux 用户所共用的 linux 区.H. Peter Anvin(<Peter.Anvin@linux.org>, Yggdrasil Computing,Inc) 现在维护登记分配到 linux 区的字符. 该区包括一些 Unicode 中缺少的 DEC VT100 的图形字符, 这使控制台的字体缓冲区可以直接获得这些字符, 该区还包括一些象 Klingon 这样的古老语言所使用的字符.

文献 (LITERATURE)

*
Information technology - Universal Multiple-Octet Coded Character Set (UCS) - Part 1: Architecture and Basic Multilingual Plane. International Standard ISO 10646-1, International Organization for Standardization, Geneva, 1993.

这是 UCS 的正式规范, 非常正式, 也很厚, 还非常贵. 如果要定购信息, 去看看 www.iso.ch.

*
The Unicode Standard - Worldwide Character Encoding Version 1.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 1991.

Unicode 已经有 1.1.4 版可用,与 1.0 版的差别可以在 ftp.unicode.org 找到. Unicode 2.0 也将在 1996 年出版一本书.

*
S. Harbison, G. Steele. C - A Reference Manual. Fourth edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.

一本很好的 C 语言编程参考书. 现在的第四版包含了 1994 年对标准 ISO C 的第一次修正 (ISO/IEC 9899:1990), 添加了大量处理多种字符集的新的 C 库函数.

Unicode - 16 位统一超级字符集的更多相关文章

  1. zzy:java采用的是16位的Unicode字符集作为编码方式------理解

    java语言使用16位的Unicode字符集作为编码方式,是疯狂Java中的原话. 1,编码方式只是针对字符类型的(不包括字符串类,数值类型int等,这些只是在解释[执行]的时候放到Jvm的不同内存块 ...

  2. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  3. [Effective JavaScript 笔记] 第7条:视字符串为16位的代码单元序列

    Unicode编码,基础:它为世界上所有的文字系统的每个字符单位分配一个唯一的整数,该整数介于0~1114111之间,在Unicode术语中称为代码点(code point). 和其它字符编码几乎没有 ...

  4. MD5 32位、16位加密

    /// <summary> /// MD5 16位加密 /// </summary> /// <param name="ConvertString"& ...

  5. wchar_t是内置还是别名(亲测有效:wchar_t在windows下是16位整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)

    接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_ ...

  6. Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  7. 16位和32位的80X86汇编语言的区别

    需要注意的是汇编不是一种语言,不同平台有不同的汇编语言对应,因为汇编和操作系统平台相关,所以汇编语言没有移植性.对于IA-32架构平台而言,选用的32位80386汇编语言,也就只说讨论的操作系统平台是 ...

  8. 颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别?计算机颜色格式( 8位 16位 24位 32位色)<转>

    颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别简单地说这里说的位数和windows系统显示器设置中的颜色位数是一样的.表示的是能够显示出来的颜色的多少. 8位的意思是说,能够显示出 ...

  9. freescale 16位单片机的地址映射

    以MC9S12XS128MAL为例,其实DG128之类的类似.如图一,128代表的是单片机中的FLASH大小为128K Byte,同理64代表的是单片机中的FLASH大小为64 K Byte,256代 ...

随机推荐

  1. 【题解】Tom的烦恼

    题目描述 Tom是一个非常有创业精神的人,由于大学学的是汽车制造专业,所以毕业后他用有限的资金开了一家汽车零件加工厂,专门为汽车制造商制造零件.由于资金有限,他只能先购买一台加工机器.现在他却遇到了麻 ...

  2. 分布式-技术专区-Redis并发竞争key的解决方案详解

    Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:缓存击穿.缓存雪崩.缓存和数据一致性,以及今天要谈到的缓存并发竞争.这里的并发指的是多个redis的clie ...

  3. JUnit中Assert简单介绍

    junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类.1.assertTrue/False([String message,]boolean condi ...

  4. 根据ThinkPHP官方文档学习opensns框架

    根据ThinkPHP官方文档学习opensns框架 1.解读Application下各个Controller文件夹下的作用 控制器类的命名方式是:控制器名(驼峰法,首字母大写)+Controller ...

  5. shell 的正则表达式 grep

    以上例子的目的在于,正则表达式只能用grep -n 命令中才有作用.在ls中,他的意义是不同的,例如*符号. grep命令的解析 其中,几个特殊的正则表达式: [[:alpha:]] 代表 字母[[: ...

  6. ORA-01400: cannot insert NULL into

    Error text: ORA-01400: cannot insert NULL into when insert into view, NULL value handler in trigger. ...

  7. 【Leetcode周赛】从contest1开始。(一般是10个contest写一篇文章)

    注意,以前的比赛我是自己开了 virtual contest.这个阶段的目标是加快手速,思考问题的能力和 bug-free 的能力. 前面已经有了100个contest.计划是每周做三个到五个cont ...

  8. Java基本数据类型的类型转换规则

    基本类型转换分为自动转换和强制转换. 自动转换规则:容量小的数据类型可以自动转换成容量大的数据类型,也可 以说低级自动向高级转换.这儿的容量指的不是字节数,而是指类型表述的范围. 强制转换规则:高级变 ...

  9. python爬虫学习(3):使用User-Agent和代理ip

    使用User-Agent方法一,先建立head,作为参数传进去 import urllib.requestimport json content=input("请输入需要翻译的内容:&quo ...

  10. UnixBench算分介绍

    关于如何用UnixBench,介绍文章很多,这里就不展开了.这里重点描述下它是如何算分的. 运行参数 碰到很多客户,装好后,直接./Run,就把结果跑出来了,然后还只取最后一个分值,比谁高谁低.下面列 ...