目录结构:

contents structure [+]

1,什么是USC

USC是Universal Character Set的简称,也就是“通用字符集”,由ISO(International Organization for Standardization,国际标准化组织)制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。

1.1,USC的编码方式

USC有两种编码方式,分别为USC-2和USC-4。其中USC-2代表使用两个字节表示一个字符,USC-4代表使用4个字节表示一个字符。

2,Unicode的来源

2.1,为什么需要Unicode

计算机最开始在美国使用。一个字节有8位,也就是2的8次方,共表示256种状态。但是美国人的所有字符加起来,他们也就只用了128个,即使2的7次方,就是我们所熟知的ASCII编码。但是随着计算机的发展,慢慢地计算机被推广到全球,那么ASCII码中128个字符肯定不能够表示世界所有文化中的文字。由于世界文化的差异,因此全球许多国家编制了一套自己的字符对照表,比如:中国编制的GB2312(采用两个字节表示一个字符)。这种情况下,编码就出现了混乱,每个国家都有一套自己的编码,每个国家都不认识彼此的编码,这样极不利于计算机的推广和规范化。因此,ISO在这个时候站出来了,并且制定了一套USC(Universal Character Set)字符对照表,这套对照表就是Unicode前身。

2.2,Unicode的方式

我们现在知道了Unicode就是一个基于USC的字符对照表,接下来我们算一算USC最多能够表示的字符数量。如果采用USC-4,那么4个字节表示一个字符,也就是可以表示0xFFFFFFFF种字符,但是Unicode只表示到其中的0x10FFFF,所以Unicode表示范围是从0到0x10FFFF。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。其中平面0上也定义了6400个码位的专用区域,就是0xE000-0xF8FF,还定义了2048个码位的代理区域,就是0xD800-0xDFFF。所谓专用区,就是保留给大家放自定义字符的区域,可以简写为PUA。0平面上的代理区域就是使用两个UTF-16字符表示BMP以外的字符。在Unicode5.0.0中,如果平面0,平面1,平面2,平面14,平面15,平面16中都把码位定义满了(平面15和平面16都只定义了65534个码位),则总码位=65536*6-4=393212个,但是在Unicode5.0.0中却只有238605个码位,所以6个平面中肯定还有一些平面没有完全定义。

  最高字节(group) 次高字节(plane) 第三字节(row)  第四字节(cell) 平面范围 备注
group 0, plane 0(BMP)

0000 0000 -

0000 0000

0000 0000-

0000 0000

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0 -

0xFFFF

Unicode已定义60528个码位

其中:0xE000-0xF8FF表示专用区域。

0xD800-0xDFFF表示代理区域。

有27973个码位表示汉字。

group 0, plane 1

0000 0000 -

0000 0000

0000 0001 -

0000 0001

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x10000 -

0x1FFFF

Unicode已定义3419个码位

group 0, plane 2

0000 0000 -

0000 0000

0000 0010 -

0000 0010

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x20000 -

0x2FFFF

Unicode已定义43253个码位

其中:43253个码位都表示汉字

group 0, plane 3

0000 0000 -

0000 0000

0000 0011 -

0000 0011

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x30000 -

0x3FFFF

Unicode未定义码位
group 0, plane 4

0000 0000 -

0000 0000

0000 0100 -

0000 0100

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x40000 -

0x4FFFF

Unicode未定义码位
group 0, plane 5

0000 0000 -

0000 0000

0000 0101 -

0000 0101

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x50000 -

0x5FFFF

Unicode未定义码位
group 0, plane 6

0000 0000 -

0000 0000

0000 0110 -

0000 0110

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x60000 -

0x6FFFF

Unicode未定义码位
group 0, plane 7

0000 0000 -

0000 0000

0000 0111 -

0000 0111

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x70000 -

0x7FFFF

Unicode未定义码位
group 0, plane 8

0000 0000 -

0000 0000

0000 1000 -

0000 1000

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x80000 -

0x8FFFF

Unicode未定义码位
group 0, plane 9

0000 0000 -

0000 0000

0000 1001 -

0000 1001

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x90000 -

0x9FFFF

Unicode未定义码位
group 0, plane 10

0000 0000 -

0000 0000

0000 1010 -

0000 1010

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0xA0000 -

0xAFFFF

Unicode未定义码位
group 0, plane 11

0000 0000 -

0000 0000

0000 1011 -

0000 1011

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0xB0000 -

0xBFFFF

Unicode未定义码位
group 0, plane 12

0000 0000 -

0000 0000

0000 1100 -

0000 1100

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0xC0000 -

0xCFFFF

Unicode未定义码位
group 0, plane 13

0000 0000 -

0000 0000

0000 1101 -

0000 1101

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0xD0000 -

0xDFFFF

Unicode未定义码位
group 0, plane 14

0000 0000 -

0000 0000

0000 1110 -

0000 1110

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0xE0000 -

0xEFFFF

Unicode已定义337个码位
group 0, plane 15

0000 0000 -

0000 0000

0000 1111 -

0000 1111

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0xF0000 -

0xFFFFF

Unicode只定义65534个码位

其中:0xF0000 - 0xFFFFD作为专用区

group 0, plane 16

0000 0000 -

0000 0000

0001 0000 -

0001 0000

0000 0000 -

1111 1111

0000 0000 -

1111 1111

0x100000 -

0x10FFFF

Unicode只定义65534个码位

其中:0x100000-0x10FFFD作为专用区

现在来算一下在Unicode 5.0.0版本中实际的字符有多少个 ,只需要用总共的码位数减去平面15的专用区码位、减去平面16的专用区码位、减去平面0的专用区码位、减去平面0的代理区域码位,即是实际的字符数,238605-65534*2-6400-2048=99089,所以在Uincode5.0.0中实际表示字符的只有99089个字符。

3,什么是UTF

UTF就是Unicode Transformation Format,就是Unicode字符转换格式,包括UTF-8,UTF-16,UTF-32。

3.1,UTF和Unicode的关系

现在我们知道了Unicode就是一张字符对照表,类似于ASCII码表。UTF的作用就是将字符对应的数字按照某种格式转化为程序数据。UTF-8故名思意就是每8位保存一个字符,UTF-16顾名思意就是每16位保存一个字符,UTF-32就是每32位保存一个字符。

4,UTF-8的编码方式

UTF-8又称为可变字节编码,以字节为单位(8位)对Unicode进行编码。从Unicode到UTF-8的编码方式如下:
Unicode编码(十六进制) 
UTF-8 字节流(二进制)
000000-00007F
0xxxxxxx
000080-0007FF
110xxxxx 10xxxxxx
000800-00FFFF
1110xxxx 10xxxxxx 10xxxxxx
010000-10FFFF 11110xxx10xxxxxx10xxxxxx10xxxxxx

UTF-8的特点是对不同范围的字符使用不同长度的编码。对于UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。

5,UTF-16的编码方式

UTF-16编码以两个字节为单位对Unicode进行编码。

对于Unicode小于0x10000的数据,UTF-16的编码与Unicode的编码相同,换句话说也就是BMP平面(平面0)中的Unicode字符编码与UTF-16的编码相同。

对于Unicode大于0x10000的数据,我们先计算Unicode编码减去0x10000,然后再将得到得到的值写成二进制形式:yyyy yyyy yyxx xxxx xxxx,最后得到该Unicode的UTF-16编码(二进制)就是:110110yyyyyyyyyy 110111xxxxxxxxxx。

6,什么是BOM

BOM就是Btye Order Mark,即使字节顺序标记。BOM分为两种,分别是“大端”(Big Endian, BE)和“小端”(Little Endian, LE)。就是在传输数据中指定数据的顺序的协议。

7,参考文章

百度百科Unicode

Unicode和UTF-8有何区别

Unicode和UTF的关系的更多相关文章

  1. Unicode和UTF-8的关系

    Unicode和UTF-8都是表示编码,这个我一直都知道,但是这两个实际上是干什么用的,到底是怎么编码的,为什么有了Unicode还要UTF-8,它们之间有什么联系又有什么区别呢?这个问题一直困扰着我 ...

  2. Unicode 和 UTF-8 的关系

    曾经这个世界上,有着gb2312,gbk,latin1,utf 等各种字符集,现在,我们也能不时的看到他们的身影. 但是值得庆幸的事,时过境迁,这些主要的字符集,都已经逐渐被utf8取代. 但是我们很 ...

  3. 字节的高低位知识,Ascii,GB2312,UNICODE等编码的关系与来历

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理 ...

  4. ASCII Unicode UTF-8 之间的关系

    转载请标明:https://i.cnblogs.com/EditPosts.aspx?opt=1 1. ASCII ASCII 只有127个字符,表示英文字母的大小写.数字和一些符号,但由于其他语言用 ...

  5. 字符编码 ASCII、Unicode和UTF-8的关系

    摘抄自廖雪峰 教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机 ...

  6. Unicode、UTF-8 和 ISO8859-1

    Unicode.UTF-8 和 ISO8859-1到底有什么区别 1.本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文" ...

  7. [转]Unicode和UTF-8的关系

    Unicode和UTF-8的关系作者: 张军 原文地址: http://blog.renren.com/blog/284133452/485453790 今天中午,我突然想搞清楚Unicode和UTF ...

  8. 字符编码 ASCII,Unicode和UTF-8的关系

    转自:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143166410626 ...

  9. ASCII、UNICODE、UTF

    在计算机中,一个字节对应8位,每位可以用0或1表示,因此一个字节可以表示256种情况. ascii 美国人用了一个字节中的后7位来表达他们常用的字符,最高位一直是0,这便是ascii码. 因此asci ...

随机推荐

  1. Is there anyway to discover which ip addresses are connected to the db?

    From mongo shell run db.currentOp() to show all active connections or db.currentOp(true) to show all ...

  2. (纪录片)现代生活的秘密规则:算法 The Secret Rules of Modern Living: Algorithms

    简介: The Secret Rules of Modern Living: Algorithms (2015) 导演: David Briggs主演: Marcus du Sautoy类型: 纪录片 ...

  3. cyml

    bin/kafka-topics.sh --create --replication-factor 1 --partitions 1 --topic mc_logger2 --zookeeper lo ...

  4. 轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级)

    轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级) 实验室所在的课题组以研究云计算为主,但所有的研究都是在基于理论的凭空想像,缺少分布式环境的平台的实践,云计算神马的都是浮云了.因此,我 ...

  5. Dictionary应用

    using System; using System.Collections.Generic; using System.Data; using System.Web; using System.We ...

  6. 用一条sql取得第10到第20条的记录-Mssql数据库

    因为id可能不是连续的,所以不能用取得10<id<20的记录的方法. 有三种方法可以实现: 一.搜索前20条记录,指定不包括前10条 语句: select top 20 * from tb ...

  7. 如何随机获取数据库不连续ID的数据?

    这个问题的来由是我朋友要为一网站实现一个标签云功能,和我交流后我给出了一个方案,在此略作记录,亦求拍砖. 大概需求这是样的: 在数据库有一张表A如下图: 其中id字段的值未必是连续的,现在我朋友要做的 ...

  8. JavaScript公共函数

    [在此处输入文章标题] // JScript 文件 /* ================================================================== JS 公 ...

  9. MongoDB副本集配置系列四:节点的关闭顺序

    接上一篇博客:http://www.cnblogs.com/xiaoit/p/4522218.html Primary Secondary Arbiter 1:关闭顺序PSA :会报错 2:关闭顺序P ...

  10. dpkg: warning: files list file for package `*****' missing, assuming package has no files currently installed解决办法

    一个好友的国外VPS由于操作不当,结果装软件的时候总是提示dpkg: warning: files list file for package `*****' missing, assuming pa ...