UCS-2和UTF8的四个新知识点

最初的unicode编码是固定长度的,16位,也就是2两个字节代表一个字符,这样一共可以表示65536个字符。显然,这样要表示各种语言中所有的字符是远远不够的。Unicode4.0规范考虑到了这种情况,定义了一组附加字符编码,附加字符编码采用2个16位来表示,这样最多可以定义1048576个附加字符,目前unicode4.0只定义了45960个附加字符。

Unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:UTF-8,UCS-2和UTF-16,三种unicode字符集之间可以按照规范进行转换。

UTF-8

UTF-8是一种8位的unicode字符集,编码长度是可变的,并且是ASCII字符集的严格超集,也就是说ASCII中每个字符的编码在UTF-8中是完全一样的。UTF-8字符集中,一个字符可能是1个字节,2个字节,3个字节或者4个字节长。一般来说,欧洲的字母字符长度为1到2个字节,而亚洲的大部分字符则是3个字节,附加字符为4个字节长。

Unix平台中普遍支持UTF-8字符集,HTML和大多数浏览器也支持UTF-8,而window和java则支持UCS-2。

UTF-8的主要优点:

  • 对于欧洲字母字符需要较少的存储空间。
  • 容易从ASCII字符集向UTF-8迁移。

UCS-2

UCS-2是固定长度为16位的unicode字符集。每个字符都是2个字节,UCS-2只支持unicode3.0,所以不支持附加字符。

UCS-2的优点:

  • 对于亚洲字符的存储空间需求比UTF-8少,因为每个字符都是2个字节。
  • 处理字符的速度比UTF-8更快,因为是固定长度编码的。
  • 对于windows和java的支持更好。

UTF-16

UTF-16也是一种16位编码的字符集。实际上,UTF-16就是UCS-2加上附加字符的支持,也就是符合unicode4.0规范的UCS-2。所以UTF-16是UCS-2的严格超集。

UTF-16中的字符,要么是2个字节,要么是4个字节表示的。UTF-16主要在windows2000以上版本使用。

UTF-16相对UTF-8的优点,和UCS-2是一致的。

Oracle从7.0开始提供对Unicode的支持。Oracle个版本的unicode字符集支主要有:

AL32UTF8

一种UTF-8编码的字符集,支持最新的unicode4.0标准。字符长度为1,2或者3个字节,附加字符则为4字节长。

UTF8

支持unicode3.0的UTF-8编码方式。由于附加字符是在unicode3.1中提出的,UTF8不支持附加字符。但是unicode3.0已经为附加字符预留了编码空间,所以即使在UTF8的数据库中插入附加字符,也是可以的,只是数据库会将该字符分隔成两部分,需要占6个字符的长度。所以,如果需要支持附加字符,那么建议将数据库的字符集切换为新的AL32UTF8。

UTF8可用于数据库字符集,也可用于国家字符集。

UTFE

UTFE是基于EBCDIC平台的unicode字符集,就像ASCII平台上的UTF8一样。不同的是,UTFE中,每个字符可能占1,2,3或者4个字节,而附加字符则需要2个4个字节,也就是8个字节来表示。

AL16UTF16

AL16UTF16是一种UTF-16编码的unicode字符集,在Oracle中用于国家字符集。

AL24UTFFSS

该字符集只支持unicode1.1规范,在Oracle7.2~8i版本中使用,目前已经淘汰。

参考:http://www.ningoo.net/html/2007/unicode_encode_in_oracle.html

---------------------------------------------------------------------------

总结:

1. windows使用UCS-2,但没想到UCS-2只支持unicode3.0,那Windows对附加字符是怎么处理的?(问题:什么是附加字符?)
2. 没想到UTF8对附加字符的处理也有限制,但是又留有余地。请问UTF-8有没有也在进化,从而可以直接表示附加字符?
3. 我不懂,为什么UTF-16为什么有可能是4个字节表示?这样岂不是名不符实?不是还有专门的UTF-32吗?
4. Unicode 4.0使用4个字节表示(其实是2个16位),这样可以定义1048576个附加字符。即Unicode不受65535的限制,但目前只定义了45960个附加字符(除了附加字符还有其它字符?那总共是多少?)。既然只使用了这么少的空间,为什么要使用4个字节表示呢?

时间: 2024-07-29 08:10:05

UCS-2和UTF8的四个新知识点的相关文章

【转载】新知识点:JAVA List.add(int,object)

转载地址:http://blog.sina.com.cn/s/blog_6819fa800100lwr6.html 1.函数原型 void add(int index, E element) 在列表的指定位置插入指定元素(可选操作).将当前处于该位置的元素(如果有的话)和所有后续元素向右移动(在其索引中加 1). 2.参数: index - 要在其中插入指定元素处的索引 element - 要插入的元素   3.抛出: UnsupportedOperationException - 如果列表不支

新知识点归纳:

新知识点归纳: 1-------    locals():  获取所有的局部变量 name = 'kermit' def run(x): z = 2 y = 3 print(locals()) run(5) # {y:3, z:2, x:5}   2-------     admin 1.启动: 自动扫描apps里面所有的stark.py文件 2.注册: 3.设计url: 原文地址:https://www.cnblogs.com/kermitjam/p/9352866.html

第四十七个知识点:什么是Fiat-Shamir变换?

第四十七个知识点:什么是Fiat-Shamir变换? 只要Alice和Bob同时在线,Sigma协议能快速的完成Alice向Bob证明的任务.Alice向Bob发送承诺,Bob返回一个挑战,最后Alice给出一个回应.不幸的是,没有进一步的修改,Sigma协议实际上不是零知识的:它们仅仅是诚实验证者零知识的. Fiat-Shamir变换是一种可以将Sigma协议变成非交互证明的技术.这不仅仅会让Alice可以通过给Bob发送邮件完成证明(Bob可以稍后阅读邮件而不必返回一个挑战),而且它能把任何

(二十四)linux新定时器:timefd及相关操作函数

timerfd是Linux为用户程序提供的一个定时器接口.这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景. 一,相关操作函数 #include <sys/timerfd.h> int timerfd_create(int clockid, int flags); int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itim

UCS UTF UTF-7 UTF-8 UTF-16

Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案.Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS.UCS可以看作是"Unicode Character Set"的缩写.UCS规定了怎么用多个字节表示各种文字. UCS有两种格式:UCS-2和UCS-4. 顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,

【转载】Android N 完全不同以往的四个新特性

Google最近发布了Android的下一个版本,Android N的开发者预览版.此次预览版,可以让我们开发者在正式发布之前就测试代码,包括一些新的API,甚至于也可以提前反馈那些对于我们来说有些困扰的变化.这次的发布版本只酝酿了几个月,但是其中一些令人惊奇的功能已经看起来很棒了.相信你也一样对此感到非常兴奋! 接下来,列出一些我们迫不及待想要上手的新变化. 1. 支持Java 8语言特性 通常来讲,Java在最性感的语言当中根本就排不上号.更不用说,那些还仅仅支持Java 7部分特性的平台了

2017上半年软考 第四章 重要知识点

第四章 讲了项目管理的一般知识,重点是:[项目特点:一次性,临时性,独特性.渐进明细: 信息系统集成项目特点:以满足客户和用户的需求为根本出发点.是选择最适合的用户需求和投资规模的产品.高技术和高技术集成.系统工程.成员年轻流动率高.强调沟通重要性,系统集成项目管理即是一种管理行为又是一种技术行为: 项目的约束性目标=管理性目标: 项目成果性目标=项目目标: 项目smart原则:具体的specific.可测量的measurable.可达到的attainable.相关的relevant.有明确时限

有关于canvas几个新知识点

对于canvas的初学者来说,以下几点应该是不知道的知识点: 1.canvas有兼容IE6/7/8的脚本文件 下载地址:https://github.com/arv/explorercanvas 2.用canvas对象获取的2d绘图上下文其实可以自己往里面扩展自己的绘图方法:如 绘制星星.画虚线等等 /** 画五角星的方法 参数:cxt canvas上下文 * x:星星的中心坐标 ,y: 星星的中心y轴坐标 *r : 星星中间尖的圆半径 *R : 星星外接圆半径 *rotation:星星逆时针旋

es6 中一些常见的新知识点

1,箭头函数,基本语法:()=>{}; 2,cookie的应用 3,页面重定向 4,void关键字 5,生成器function* () {},yield关键字,.next()方法,不能用箭头函数来创建生成器. 所谓"生成器",其实是一个函数,但是这个函数的行为会比较特殊: 它并不直接执行逻辑,而是用来生成另一个对象(这也正是"生成器"的含义) 它所生成的对象中的函数可以把逻辑拆开来,一片一片调用执行,而不是像普通的函数,只能从头到尾一次执行完毕 生成器的语法和