目录结构:

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. 云服务器 ECS Linux Ubuntu 主机修改主机名

    云服务器 ECS Linux 主机修改主机名 修改云服务器 ECS Linux 主机名常见的有两种方式,本文对此进行概要说明. 临时生效修改 使用命令行修改 hostname 主机名(可自定义),重新 ...

  2. Javascript常用语法 (一)

    判断成员是否是一个函数: if (typeof options.sourceMapName === 'function') { mapNameGenerator = options.sourceMap ...

  3. GPUImage API 文档之GPUImagePicture类

    GPUImagePicture类静态图像处理操作,它可以是需要处理的静态图像,也可以是一张作为纹理使用的图片,调用向它发送processImage消息,进行图像滤镜处理. 方法 - (id)initW ...

  4. 浅谈压缩感知(十五):感知矩阵之spark常数

    在压缩感知中,有一些用来评价感知矩阵(非测量矩阵)的指标,如常见的RIP等,除了RIP之外,spark常数也能够用来衡量能否成为合适的感知矩阵. 0.相关概念与符号 1.零空间条件NULL Space ...

  5. (纪录片)鸟瞰中国 China from Above

    简介: 类型: 纪录片官方网站: natgeotv.com/uk/china-from-above制片国家/地区: 美国语言: 英语集数: 2单集片长: 44分钟IMDb链接: tt4872012 主 ...

  6. Android 关于操作栏 ActionBar 的设计原则【转载+整理】

    原文地址 本文内容 操作栏目的 基本布局 适应旋转和不同的屏幕尺寸 副操作栏的布局 操作栏按钮 上下文操作栏 操作栏清单 设计原则就是为你在编写 Android APP 时,尤其是如何安排操作按钮的位 ...

  7. SuperMap开发入门4——保存的坑

    工作空间.地图等的打开.保存.删除是最基本的操作,可我居然卡在保存工作空间的问题上了. 功能需求 需求很简单:打开工作空间中的某一地图,缩放一下,保存地图.(下次打开时,已经缩放到上次修改过的地方) ...

  8. Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to IP1:8020 Invalid volume failure config value: 1

    2017-02-27 16:19:44,739 ERROR datanode.DataNode: Initialization failed for Block pool <registerin ...

  9. poj 3042 Grazing on the Run

    这个题目原型应该是吃完所有的草丛的最小时间,现在变成了每个草丛被吃的时间和,貌似如果还是按照原来的dp方法dp[i][j]表示吃完i到j的草丛的花掉的时间的话,有两个因素会影响后面的决策,一个是花掉的 ...

  10. javascript将算法复杂度从O(n^2)做到O(n)

    compare the difference of two giving array, return results: 1. elements in both array, 2. elements o ...