ASCII?Unicode?GBK?还不清楚???

1. ASCII

ASCII:主要用于显示现代英语和其它西欧语言

标准 ASCII 码(基础 ASCII 码):使用 7 为二进制位(剩下一位为 0)来表示所有的大小写字母、数字0~9、标点符号以及美式的特殊控制字符

其中:

0~31、127(共33个)是控制字符或通信专用字符(其余为可显字符)

控制字符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等

​ 通信专用字符:SHO(文头)、EOT(文尾)、ACK(确认)等

​ ASCII 码值为8、9、10、13 分别转换为退格、制表、换行、回车字符

​ 0:NULL

​ 127:DEL

32~126 是字符(共95个)

​ 32:空格

​ 48~57:0-9 的十个阿拉伯数字

​ 65~90:26个大写字母

​ 97~122:26个小写字母

​ 其余为一些标点符号、运算符号

扩展 ASCII 码:扩展 ASCII 码包含标准 ASCII 码中已有的 128 个字符,且又增加了 128 个字符,总共是 256 个字符。

2. Unicode

ASCII 码,只有 256 个字符,对美国来说没什么问题,但世界上还存在其它许多国家。所以,需要一种更加全面的字符集。

Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码(使用四个字节为每个字符编码),使得计算机可以用更为简单的方式来呈现和处理文字。

Unicode备受认可,并广泛地应用于计算机软件的国际化与本地化过程。有很多新科技,如可扩展置标语言(Extensible Markup Language,简称:XML)、Java编程语言以及现代的操作系统,都采用Unicode编码。

Unicode可以表示中文。

3. 有了 Unicode,为什么还需要 UTF-8

广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码规则。

unicode 虽然统一了全世界字符的二进制编码,但没有规定如何存储。

如果 Unicode 统一规定,每个符号就要用三个或四个字节表示,因为字符太多,只能用这么多字节才能表示完全。一旦这么规定,那么每个英文字母前都必然有二到三个字节是 0,因为所有英文字母在 ASCII 中都有,都可以用一个字节表示,剩余字节位置就要补充 0。

如果这样,文本文件的大小会因此大出二三倍,这对于存储来说是极大的浪费。这样导致一个后果:出现了 Unicode 的多种存储方式。

UTF-8 就是 Unicode 的一个使用方式(UTF-8 使用可变长度字节来储存 Unicode字符):

​ ASCII字母继续使用1字节储存;

​ 重音文字、希腊字母或西里尔字母等使用2字节来储存;

​ 常用的汉字就要使用3字节

​ 辅助平面字符则使用4字节

使用这种编码方式可以大大节省空间。比如纯英文网站就要比纯中文网站占用的存储小一些。

4. UTF8、UTF16、UTF32 区别

UTF 是英文 Unicode Transformation Format 的缩写,意为把 Unicode 字符转换为某种格式。

UTF 系列编码方案(UTF-8、UTF-16、UTF-32)均是由 Unicode 编码方案衍变而来,以适应不同的数据存储或传递,它们都可以完全表示 Unicode 标准中的所有字符。目前,这些衍变方案中 UTF-8 被广泛使用,而 UTF-16 和 UTF-32 则很少被使用。

区别:

​ UTF-8 使用一至四个字节为每个字符编码,其中大部分汉字采用三个字节编码,少量不常用汉字采用四个字节编码。因为 UTF-8 是可变 长度的编码方式,相对于 Unicode 编码可以减少存储占用的空间,所以被广泛使用。

​ UTF-16 使用二或四个字节为每个字符编码,其中大部分汉字采用两个字节编码,少量不常用汉字采用四个字节编码。UTF-16 编码有大 尾序和小尾序之别,即 UTF-16BE 和 UTF-16LE,在编码前会放置一个 U+FEFF 或 U+FFFE(UTF-16BE 以 FEFF 代表,UTF-16LE 以 FFFE 代表),其中 U+FEFF 字符在 Unicode 中代表的意义是 ZERO WIDTH NO-BREAK SPACE,顾名思义,它是个没有宽度也没有断 字的空白。

​ UTF-32 使用四个字节为每个字符编码,使得 UTF-32 占用空间通常会是其它编码的二到四倍。UTF-32 与 UTF-16 一样有大尾序和小尾 序之别,编码前会放置 U+0000FEFF 或 U+0000FFFE 以区分。

5. 有了 UTF-8,为什么还需要 GBK?

其实UTF8确实已经是国际通用的字符编码了,但是这种字符标准毕竟是外国定的,而国内也有类似的标准指定组织,也需要制定一套国内通用的标准,于是GBK就诞生了。

6. GBK、GB2312、GB18030之间的区别

三者都是支持中文字符的编码方式,最常用的是GBK。

GB2312(1980年):16位字符集,收录有6763个简体汉字,682个符号,共7445个字符; 优点:适用于简体中文环境,属于中国国家标准,通行于大陆,新加坡等地也使用此编码; 缺点:不兼容繁体中文,其汉字集合过少

GBK(1995年):16位字符集,收录有21003个汉字,883个符号,共21886个字符; 优点:适用于简繁中文共存的环境,为简体Windows所使用(代码页cp936),向下完全兼容gb2312,向上支持 ISO-10646 国际标准 ;所有字符都可以一对一映射到unicode2.0上; 缺点:不属于官方标准,和big5之间需要转换;很多搜索引擎都不能很好地支持GBK汉字。

GB18030(2000年):32位字符集;收录了27484个汉字,同时收录了藏文、蒙文、维吾尔文等主要的少数民族文字。 优点:可以收录所有你能想到的文字和符号,属于中国最新的国家标准; 缺点:目前支持它的软件较少。

看完这些,相信各位已经恍然大悟了吧。嘻嘻~~

你可能感兴趣的:(javaSE,1024程序员节)