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

原创 2015年11月21日 15:55:23

1.ascII码。

0x0*******; 总共127个。 有英文字母和符号。


好吧,问题来了。英文够用了,其他不够用啊。于是用两种方法解决: 

a)GB2312 GBK 这一类的编码方式,用两位(2的16次方中变幻)来表示中文字符。 兼容ASC2

b)   Unicode编码。 世界上一切所有的字符(各个国家,各种字符)都囊括进来了,用两个字节(16位)来表示。UTF-8,UTF-16,UTF-32都属于Unicode编码,他们是Unicode编码的表现形式。


2.GB2312/GBK

聪明的中国人发现 asc2码表示不了中文后,就扩展了位数。所有的汉字字符都用2个字节(16位)表示。

于是先有了 GB2312。 GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。

然后发现还是有些没有包括进去,就又出现了GBK。GBK向下兼容GB2312和ASC2,他是GB2312的升级版。‘

GBK还收录了GB2312不包含的 汉字部首符号、竖排标点符号等字符。


3.Unicode

Unicode 做的跟国人GBK做的类似。但是格局更大。 GBK是收录了绝大部分汉字,部分阿拉伯符号,部分俄文,部分希腊字母等等。

Unicode收录的是全世界所有的文字和符号。 Unicode和ASC2兼容,但是与GB2312,GBK都不兼容。

所以世界上所有的符号都能用两个字节来表示。


这时候,中国人开心了,英文国家的人就不开心了。本来他们用asc2好好的,每个字符用一个字节表示,现在得用两个字节表示,这将占用带宽和硬盘呢。

于是他们基于Unicode发明了 UTF-8编码。


UTF-8是这样做的:

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。这样就形成了如下的UTF-8标记位:

0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
... ...


这样,UTF-8存储英文时只用占用一个字节了。省!


接下来说说 UTF-16,

UTF-16没啥好说的,就是所有字符用两个字节,16位来表示。(但是要分大端对其还是小端对其)

UTF-16就是把Unicode码搬过来,简单无脑,只是会多费点空间。

各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解

一、编码历史与区别         一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以...

【编码】ASCII、Unicode、GBK和UTF-8字符编码的区别联系

ASCII、Unicode、GBK和UTF-8字符编码的区别联系2015-05-08 实验楼很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开...

UNICODE, GBK, UTF-8编码的转换

>                 Tags: encoding,c 1. 基础 1.1 ASCII码 我们知道, 在计算机内部, 所有的信息最终都表示为一个二进制的字符串. 每一个二进制 位(...

GB2312与utf16、utf8的汉字对照表

GB2312标准共收录汉字6763个,其中一级汉字3755个,二级汉字3008个。 本文将GB2312中所有的汉字,在GB2312、utf16及utf8中的编码值都列了出来,方便进行对照查看。...
  • lintax
  • lintax
  • 2016年07月16日 13:16
  • 3584

关于编码ansi、GB2312、unicode与utf-8的区别

原文:http://zz563143188.iteye.com/blog/1842131 终于对编码有一定的认识,一说编码,就tmd的恶心。   关于编码ansi、GB2312、unicode与...
  • chruan
  • chruan
  • 2013年04月17日 09:00
  • 13438

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

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Unicode环境下完成CString向string类型的转换

CString是MFC的字符串类,它不是基本类型,而是对字符串的封装,它是自适应的,在UNICODE环境下就是CStringW,在非UNICODE环境下就是CStringA。       CStri...

UTF-8与UTF-16的区别

UTF-8 与UTF-16的区别     UTF-16比较好理解,就是任何字符对应的数字都用两个字节来保存.我们通常对Unicode的误解就是把Unicode与UTF-16等同了.但是很显然如果都是...

字符编码的故事:ASCII,GB2312,Unicode,UTF-8,UTF-16

字符编码的故事:ASCII,GB2312,Unicode,UTF-8,UTF-16由于好奇,我非常想搞清楚关于字符编码的疑惑。比如Unicode,UTF-8,UTF-16,以及有BOM,无BOM之前的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unicode,UTF-8,UTF-16,UTF-32,gb2312,gbk区别
举报原因:
原因补充:

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