UNICODE与UTF8,UTF16的含义

转载 2012年03月28日 11:42:19
最初,Internet上只有一种字符集——ANSI的ASCII字符集(American Standard Code for Information Interchange, “美国信息交换标准码),它使用7 bits来表示一个字符,总共表示128个字符,后来IBM公司在此基础上进行了扩展,用8bit来表示一个字符,总共可以表示256个字符,充分利用了一个字节所能表达的最大信息
ANSI字符集:ASCII字符集,以及由此派生并兼容的字符集,如:GB2312,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。
UNICODE与UTF8,UTF16

由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符集,它固定使用16 bits(两个字节)来表示一个字符,共可以表示65536个字符
    标准的Unicode称为UTF-16(UTF:UCS Transformation Format )。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。 (Unicode字符集有多种编码形式)
例如“连通”两个字的Unicode标准编码UTF-16 (big endian)为:DE 8F 1A 90
                 而其UTF-8编码为:E8 BF 9E E9 80 9A


       当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件一般采用三种方式来决定文本的字符集和编码:
检测文件头标识,提示用户选择,根据一定的规则猜测
最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表:
EF BB BF    UTF-8
FE FF     UTF-16/UCS-2, little endian
FF FE     UTF-16/UCS-2, big endian
FF FE 00 00   UTF-32/UCS-4, little endian.
00 00 FE FF   UTF-32/UCS-4, big-endian.

Unicode:

unicode.org制定的编码机制, 要将全世界常用文字都函括进去.
在1.0中是16位编码, 由U+0000到U+FFFF. 每个2byte码对应一个字符; 在2.0开始抛弃了16位限制, 原来的16位作为基本位平面, 另外增加了16个位平面, 相当于20位编码, 编码范围0到0x10FFFF.

UCS:

ISO制定的ISO10646标准所定义的 Universal Character Set, 采用4byte编码.

Unicode与UCS的关系:

ISO与unicode.org是两个不同的组织, 因此最初制定了不同的标准; 但自从unicode2.0开始, unicode采用了与ISO 10646-1相同的字库和字码, ISO也承诺ISO10646将不会给超出0x10FFFF的UCS-4编码赋值, 使得两者保持一致.

UCS的编码方式:



UCS-2, 与unicode的2byte编码基本一样.

UCS-4, 4byte编码, 目前是在UCS-2前加上2个全零的byte.

UTF: Unicode/UCS Transformation Format

UTF-8, 8bit编码, ASCII不作变换, 其他字符做变长编码, 每个字符1-3 byte. 通常作为外码. 有以下优点:
* 与CPU字节顺序无关, 可以在不同平台之间交流
* 容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误(如GB码错一个字节就会整行乱码)

UTF-16, 16bit编码, 是变长码, 大致相当于20位编码, 值在0到0x10FFFF之间, 基本上就是unicode编码的实现. 它是变长码, 与CPU字序有关, 但因为最省空间, 常作为网络传输的外码.
UTF-16是unicode的preferred encoding.

UTF-32, 仅使用了unicode范围(0到0x10FFFF)的32位编码, 相当于UCS-4的子集.

UTF与unicode的关系:

Unicode是一个字符集, 可以看作为内码.
而UTF是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特殊意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来一些优点.

中国国标编码:

GB 13000: 完全等同于ISO 10646-1/Unicode 2.1, 今后也将随ISO 10646/Unicode的标准更改而同步更改.

GBK: 对GB2312的扩充, 以容纳GB2312字符集范围以外的Unicode 2.1的统一汉字部分, 并且增加了部分unicode中没有的字符.

GB 18030-2000: 基于GB 13000, 作为Unicode 3.0的GBK扩展版本, 覆盖了所有unicode编码, 地位等同于UTF-8, UTF-16, 是一种unicode编码形式. 变长编码, 用单字节/双字节/4字节对字符编码. GB18030向下兼容GB2312/GBK.
GB 18030是中国所有非手持/嵌入式计算机系统的强制实施标准.

彻底搞懂字符编码(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)

最近有一些朋友常问我一些乱码的问题,和他们交流过程中,发现这个编码的相关知识还真是杂乱不堪,不少人对一些知识理解似乎也有些偏差,网上百度,google的内容,也有不少以讹传讹,根本就是错误的(例如说 ...
  • softman11
  • softman11
  • 2011年01月08日 16:51
  • 27392

UTF-8、UTF-16、Unicode的区别

看了很多网上的总结,我捞出来最干的部分罗列在这里,希望对大家有帮助            字符集是指字符的集合,例如所有的英文字母是字符集,所有的汉字也是字符集,全世界所有语言的符号都放在一起,也可以...
  • u011605971
  • u011605971
  • 2015年06月02日 15:16
  • 4919

(Unicode) UTF-8与UTF-16之间转换

一、Unicode的由来  1、我们知道计算机其实只认识0101这样的字符串,当然了让我们看这样的01串会比较头晕,所以为了描述简单一般都用八进制、十进制、十六进制表示。 实际上都是等价的。其它像文字...
  • zx249388847
  • zx249388847
  • 2016年12月06日 17:52
  • 1854

utf-8/utf-16转换代码完整版

  • 2014年12月22日 13:51
  • 210KB
  • 下载

浅析unicode和UTF-8、UTF-16、UTF-32的区别

1、区别编码字符集和字符集编码首先要注意的是unicode是编码字符集,而UTF-8、UTF-16、UTF-32是字符集编码(好绕哎有没有)。下面我来具体解释一下:比如汉字的”汉”,在unicode中...
  • Co_yiqiu
  • Co_yiqiu
  • 2017年02月09日 19:45
  • 3690

ACSII,GB2312,GBK,GB18030,Unicode,UTF8,UTF16,UTF32,BOM区别与转换——字符编码最全总结

本人总结的最全字符编码概述,分享学习,涉及ACSII,GB2312,GBK,GB18030,Unicode,UTF8,UTF16,UTF32,BOM。 在做总结时被问到字符编码的知识,由于这块知识没...
  • yingmeng9913
  • yingmeng9913
  • 2015年09月29日 14:51
  • 1086

Unicode(UTF-8, UTF-16)令人混淆的概念

为啥需要Unicode         我们知道计算机其实挺笨的,它只认识0101这样的字符串,当然了我们看这样的01串时肯定会比较头晕的,所以很多时候为了描述简单都用十进制,十六进制,八进制表示...
  • u011447369
  • u011447369
  • 2017年02月17日 10:01
  • 1769

UNICODE,UTF-8,UTF-16

Unicode(UTF-8, UTF-16)令人混淆的概念 为啥需要Unicode         我们知道计算机其实挺笨的,它只认识0101这样的字符串,当然了我们看这样的01串时肯定会比较头晕的...
  • iamherego
  • iamherego
  • 2016年03月18日 16:35
  • 166

Unicode,UTF-8,UTF-16,UTF-32,gb2312,gbk区别

1.ascII码。 0x0*******; 总共127个。 有英文字母和符号。 好吧,问题来了。英文够用了,其他不够用啊。于是用两种方法解决:  a)GB2312 GBK 这一类的编码方...
  • u010276189
  • u010276189
  • 2015年11月21日 15:55
  • 1858

字符编码:Unicode/UTF-8/UTF-16/UCS/Endian/BMP/BOM

 Unicode(Universal Multiple-Octet Coded Character Set):目前最流行和最有前途的字符编码规范,因为它解决了不同语言编码的冲突。Uicode由来:最初...
  • zzcv_
  • zzcv_
  • 2007年06月03日 01:30
  • 4313
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UNICODE与UTF8,UTF16的含义
举报原因:
原因补充:

(最多只允许输入30个字)