语、希腊语、斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语、格鲁吉亚语,还包括 中文、日文、韩文这样的象形文字,UCS 还包括大量的图形、印刷、数学、科学符号。 * UCS-2: 与 unicode 的 2byte 编码基本一样。 * UCS-4: 4byte 编码, 目前是在 UCS-2 前加上 2 个全零的 byte。
Unicode: Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。 它是 unicode.org 制定的编码机制, 要将全世界常用文字都函括进去。 它为每种语言中的每个字符设定了统一并且唯一的二进制编码, 以满足跨语言、 跨平台进行 文本转换、处理的要求。 1990 年开始研发,1994 年正式公布。随着计算机
工作能力的增强,Unicode 也在面世以来 的十多年里得到普及。 但自从 unicode2.0 开始,unicode 采用了与 ISO 10646-1 相同的字库和字码,ISO 也承诺 ISO10646 将不会给超出 0x10FFFF 的 UCS-4 编码赋值,使得两者保持一致。 Unicode 的编码方式与 ISO 10646 的通用字符集(Universal Character Set,UCS)概念相 对应,目前的用于实用的 Unicode 版本对应于 UCS-2,使用 16 位的编码空间。 也就是每个字符占用 2 个字节,基本满足各种语言的使用。实际上目前版本的 Unicode 尚 未填充满这 16 位编码,保留了大量空间作为特殊使用或将来扩展。
UTF: Unicode 的实现方式不同于编码方式。 一个字符的 Unicode 编码是确定的,但是在实际传输过程中,由于不同系统平台的
设计不 一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同。 Unicode 的实现方式称为 Unicode 转换格式(Unicode Translation Fo
rmat,简称为 UTF)。 * UTF-8: 8bit 变长编码, 对于大多数
常用字符集(ASCII 中 0~127 字符)它只使用单字节, 而对其它常用字符(特别是朝鲜和汉语会意文字),它使用 3 字节。 * UTF-16: 16bit 编码,是变长码,大致相当于 20 位编码,值在 0 到 0x10FFFF 之间, 基本上就是 unicode 编码的实现,与 CPU 字序有关。
汉字编码: * GB2312 字集是简体字集,全称为 GB2312(80)字集,共包括国标简体汉字 6763 个。 * BIG5 字集是台湾繁体字集,共包括国标繁体汉字 13053 个。
* GBK 字集是简繁字集,包括了 GB 字集、BIG5 字集和一些符号,共包括 21003 个字 符。 * GB18030 是国家制定的一个强制性大字集标准,全称为 GB18030-2000,它的推出 使汉字集有了一个“大一统”的标准。
ANSI 和 Unicode big endia: 我们在 Windows 系统中保存文本文件时通常可以选择编码为 ANSI、 Unicode、 Unicode big endian 和 UTF-8,这里的 ANSI 和 Unicode big endia 是什么编码呢? ANSI: 使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。 在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。 Unicode big endia: UTF-8 以字节为编码单元,没有字节序的问题。UTF-16 以两个字节为编码单元,在解释一 个 UTF-16 文本前,首先要弄清楚每个编码单元的字节序。 Unicode 规范中推荐的标记字节顺序的方法是 BOM(即 Byte Order Mark)。 在 UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符, 它的编码是 FEFF。 而 FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。 UCS 规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。 这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian 的;如果收到 FFFE,就表明 这个字节流是 Little-Endian 的。 因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作 BOM。 Windows 就是使用 BOM 来标记文本文件的编码方式的。
三、编程语言与编码
C、C++、Python2 内部字符串都是使用当前
系统默认编码 Python3、
Java 内部字符串用 Unicode 保存 Ruby 有一个内部变量$KCODE 用来表示可识别的多字节字符串的编码,变量值为"EUC" "SJIS" "UTF8" "NONE"之一。 $KCOD