常见的字符编码优缺点

Posted that-boy-done

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的字符编码优缺点相关的知识,希望对你有一定的参考价值。

 

总结一下常见的几种编码优缺点

 

ANSI编码是一种对ASCII码的拓展:ANSI编码用0x00~0x7f (即十进制下的0127)范围的1 个字节来表示 1 个英文字符,超出一个字节的 0x80~0xFFFF 范围来表示其他语言的其他字符。也就是说,ANSI码仅在前1280-127)个与ASCII码相同,之后的字符全是某个国家语言的所有字符。值得注意的是,两个字节最多可以存储的字符数目是216次方,即65536个字符,这对于一个语言的字符来说,绝对够了。还有ANSI编码其实包括很多编码:中国制定了GB2312编码,用来把中文编进去另外,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准。受制于当时的条件,不同语言之间的ANSI码之间不能互相转换,这就会导致在多语言混合的文本中会有乱码

为了解决不同国家ANSI编码的冲突问题,Unicode应运而生:如果全世界每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

 

Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode

但是问题在于,原本可以用一个字节存储的英文字母在Unicode里面必须存两个字节(规则就是在原来英文字母对应ASCII码前面补0),这就产生了浪费。那么有没有一种既能消除乱码,又能避免浪费的编码方式呢?答案就是UTF-8

这是一种变长的编码方式:它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,如此一来UTF-8编码也可以是为视为一种对ASCII码的拓展。值得注意的是unicode编码中一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。从unicodeuft-8并不是直接的对应,而是要过一些算法和规则来转换。

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。

 

 GBK  扩展中文GB编码(兼容了GB2312)更全

编码方式:两个字节表示一个汉字

英文字母或半角标点占用一个字节

Unicode:国际组织编码,容纳世界上所有的文字和符号的字符编码

(1)包括UTF-32编码

每个字符用一个int来表示  abcd 需要占用4int

特点:简单,太浪费空间

(2)UTF-16编码

特点:用12short来表示一个字符

(3)UTF-8 编码

14个字节来表示一个字符(比较节省空间)

如果这个字符小(在000000-00007F之间)则用一个字节 ,一次类推如果该字符比较大比如汉字(数就比较大)占用两个字节,这个字符如果在大就用三个字节

以上是关于常见的字符编码优缺点的主要内容,如果未能解决你的问题,请参考以下文章

linux字符编码相关知识总结file命令iconv命令

常见的3种字符编码方式

字符常见的几种编码方式

计算机导论常识常见字符编码

Python常见字符编码间的转换

计算机中的编码和字符集:理解二进制字节流和常见编码方案