`
fly_ever
  • 浏览: 152572 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Unicode字符编码

    博客分类:
  • java
阅读更多



字符集:
字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。
字符集是字符的集合。
编码字符集是一个字符集,它为每一个字符分配一个唯一数字。

Unicode
Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值,这个值称为代码点(code point).
Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑得以呈现世界上数十种文字的系统。
在文字处理方面,Unicode的功用是为每一个字符提供一个唯一的代码(即一组数字),而不是一种字形。
Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。
为了使Unicode与已存在和广泛使用的旧有编码互相兼容,尤其是差不多所有电脑系统都支援的基本拉丁字母部分,所以Unicode的首256字符仍旧保留给ISO 8859-1所定义的字符,使既有的西欧语系文字的转换不需特别考量;另方面因相同的原因,Unicode把大量相同的字符重复编到不同的字符码中去,使得旧有纷杂的编码方式得以和Unicode编码间互相直接转换。

Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,所以“A”的编码书写为“U+0041”。
代码点是指可用于编码字符集的数字。编码字符集定义一个有效的代码点范围,但是并不一定将字符分配给所有这些代码点。
有效的 Unicode 代码点范围是 U+0000 至 U+10FFFF。Unicode 4.0 将字符分配给一百多万个代码点中的 96,382 代码点。
增补字符是代码点在 U+10000 至 U+10FFFF 范围之间的字符,也就是那些使用原始的Unicode 的 16 位设计无法表示的字符。从 U+0000 至 U+FFFF 之间的字符集有时候被称为基本多语言面 (BMP)。因此,每一个 Unicode 字符要么属于 BMP,要么属于增补字符。

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

编码方式:
UCS-2是用两个字节来表示代码点,其取值范围为 U+0000~U+FFFF.
为了能表示更多的文字,人们又提出了UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的。

实现方式:
字符编码方案是从一个或多个编码字符集到一个或多个固定宽度代码单元序列的映射。最常用的代码单元是字节。
UTF-32、UTF-16 和 UTF-8 是 Unicode 标准的编码字符集的字符编码方案。
Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Translation Format,简称为UTF)。
UTF-8 使用一至四个字节的序列对编码 Unicode 代码点进行编码。U+0000 至 U+007F 使用一个字节编码,U+0080 至 U+07FF 使用两个字节,U+0800 至 U+FFFF 使用三个字节,
而 U+10000 至 U+10FFFF 使用四个字节。
UTF-8 设计原理为:字节值 0x00 至 0x7F 始终表示代码点 U+0000 至 U+007F(Basic Latin 字符子集,它对应 ASCII 字符集)。这些字节值永远不会表示其他代码点,这一特性使 UTF-8 可以很方便地在软件中将特殊的含义赋予某些 ASCII 字符。
UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码。值 U+0000 至 U+FFFF 编码为一个相同值的 16 位单元。增补字符编码为两个代码单元,
第一个单元来自于高代理范围(U+D800 至 U+DBFF),第二个单元来自于低代理范围(U+DC00 至 U+DFFF)。
如果直接使用与Unicode编码一致(仅限于BMP字符)的UTF-16编码,由于每个字符占用了两个字节,在Macintosh (Mac)机和PC机上,对字节顺序的理解是不一致的。这时同一字节流可能会被解释为不同内容。
此类情况说明UTF-16的编码顺序若不加以人为定义就可能发生混淆,于是在UTF-16编码实现方式中使用了大端序(Big-Endian, 简写为UTF-16 BE)、小端序
(Little-Endian,简写为UTF-16 LE)的概念,以及可附加的字节顺序记号解决方案,目前在PC机上的Windows系统和Linux系统对于UTF-16编码默认使用UTF-16 LE。
UTF-32用四个字节表示代码点,这样就可以完全表示UCS-4的所有代码点,而无需像UTF-16那样使用复杂的算法。
UTF-16和UTF-32的一个缺点就是它们固定使用两个或四个字节,这样在表示纯ASCII文件时会有很多00字节,造成浪费。
Unicode的实现方式中,目前通用的实现方式是UTF-16小尾序(LE)、UTF-16大尾序(BE)和UTF-8。

Java 平台中的字符:
Java的char型是非常独特的,占用两个字节,因为Java中char型采用了Unicode编码。
一个 char 表示一个 UTF-16 代码单元,这样对于表示代码点有时并不够用。
char中可以放汉字~~但是必须是在ascii编码中收录了的汉字才行~ 并且,不支持词组。
Java的类型中:
byte:一个字节(8位)   byte范围: -128 ~127
char:两个字节(16位)
short:两个字节(16位)
int:四个字节(32位)(一个字长)
long:八个字节(64位)
float:四个字节(32位)
double:八个字节(64位)
GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。GBK包含全部中文字符,包括简体和繁体字
UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。UTF-8则包含全世界所有国家需要用到的字符。

char能保存一个汉字,保存汉字占用2个字节,保存英文字母占用1个字节。
汉字的UTF-8编码占用3个字节,GBK编码占用2个字节。

 

分享到:
评论

相关推荐

    Unicode 字符编码表

    Unicode字符编码表是计算机科学领域中的一个重要概念,它是一个国际标准,旨在为世界上所有字符提供一个统一的编码方式。这个编码系统将每个字符分配一个唯一的数字,称为码点,使得不同语言、符号和特殊字符都能在...

    unicode字符编码表

    unicode字符编码表 可以用图片浏览器打开 全面详细 看起来方便得多

    Unicode字符编码表

    Unicode字符编码表是国际化标准组织制定的字符编码标准,它为世界上几乎所有的书写系统提供了唯一的数字标识。Unicode的目的是统一各种不同编码系统中的字符,使得任何一个字符都可以用一个唯一的代码点(code point...

    所有UNICODE字符的编码表

    UNICODE字符编码表,也称为Unicode字符集,是一种国际标准的字符编码系统,旨在为世界上所有的文字提供一个唯一的数字代码,使得各种计算机系统能够处理任何语言的文字。这个编码表包括了汉字、日文以及其他多种语言...

    ASCII GBK Unicode字符编码表02

    ASCII GBK Unicode字符编码表,共两个文件,上传供需要人士下载

    unicode全部字符编码表

    unicode全部字符编码表,xls格式

    ASCII GBK Unicode字符编码表01

    ASCII GBK Unicode字符编码表,共两个文件,上传供需要人士下载.

    Unicode 5.1 字符编码分解表

    **Unicode 5.1 字符编码分解表** Unicode 是一种国际标准,用于在各种计算机系统中表示文本,尤其是网络上的文本。它旨在涵盖世界上几乎所有的书面语言,包括拉丁文、希伯来文、汉字、阿拉伯文等。Unicode 5.1 是 ...

    维吾尔文字符集unicode编码表

    ### 维吾尔文字符集Unicode编码表 #### 概述 本文档提供了一份详细的现代维吾尔文字符集的Unicode编码表。这份表格对于理解、处理和展示维吾尔语文字具有重要意义。通过这份表格,我们可以清晰地看到每一个维吾尔文...

    Unicode字符编码规范.txt

    Unicode是一种字符编码规范 。  先从ASCII说起。ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits)  因此,ASCII编码可以表示的最大字符数是256,其实英文字符并没有那么多,一般只用...

    UnicodeCode编码转换成字符串编码的C#类

    UnicodeCode编码转换成字符串编码的C#类 \uA054\uA055 => "中文

    维吾尔文unicode编码表

    **维吾尔文Unicode编码表**是针对现代维吾尔文中使用的字母、标点符号等字符制定的一种标准化编码方案。该编码表遵循Unicode国际标准,确保了维吾尔文在数字设备上的统一表示与兼容性。 #### 描述:标准的Unicode...

    C语言字符编码转换UNICODE、GBK、UTF-8互相转换

    在编程领域,字符编码是处理文本数据的关键环节。C语言虽然相对较旧,但它仍然被广泛用于系统级编程和底层开发,包括字符编码的转换。在这个主题中,我们将深入探讨如何在C语言中进行UNICODE、GBK和UTF-8之间的转换...

    Unicode中文编码对照表

    标题中的“Unicode中文编码对照表”是指一个用于展示Unicode字符集如何表示中文字符的参考资源。Unicode是一个全球统一的字符编码标准,旨在为世界上所有的文字提供一个唯一的数字代码,使得计算机能够正确处理各种...

    Unicode字符查询器

    这对于编程或文本处理时需要精确操作字符编码的场景尤其有用。 3. **编码/解码**:工具能将文本转换成Unicode编码形式(如UTF-8、UTF-16等)和从Unicode编码恢复原始文本,这对于跨平台数据传输和存储至关重要。 4...

    Unicode,Unicode汉字编码,Unicode汉字编码表

    Unicode是一种国际化的字符编码方案,旨在为世界上所有的文字提供统一的编码方式。它最初由Unicode联盟在1991年提出,并随着时间的发展不断完善。Unicode的主要目标是解决传统编码方案中存在的各种问题,如字符集不...

    Unicode转中文 Unicode字符串 转中文编码

    在IT行业中,字符编码是一个非常基础且重要的概念,尤其是在编程领域。C#作为一种现代的、面向对象的编程语言,处理各种字符编码问题时显得尤为重要。本文将深入探讨标题和描述中提到的“Unicode转中文”以及“字符...

    得到字符或汉字的Unicode编码

    `wchar_t`是C++中用于存储宽字符的数据类型,它可以存储一个Unicode字符。C语言的标准库提供了`<wchar.h>`头文件,其中包含了一系列处理宽字符和宽字符串的函数,如`wcscpy`用于复制宽字符串,`wprintf`用于格式化...

    ut8字符编码查询.rar

    UTF-8字符编码是一种广泛使用的Unicode字符编码方案,它的全称是“8位 Unicode 转换格式”。这个“ut8字符编码查询.rar”压缩包文件显然是为了帮助用户查询和理解UTF-8编码与GB2312、UTF-8以及Unicode编码之间的转换...

    通过对字符的unicode编码进行判断来确定字符是否为中文

    Unicode是一种多字节字符编码标准,旨在支持世界上几乎所有语言的字符表示。它通过为每个字符分配一个唯一的数字(称为代码点)来实现这一目标。对于中文字符而言,它们主要集中在Unicode的基本多文种平面(BMP)的...

Global site tag (gtag.js) - Google Analytics