常用编码的对比(ASCII,GB2312,GBK,GB18030,UCS,Unicode)
在程序开发中,文字编码一直扮演着人畜无害,却背后捅一刀的角色。
- 可能在源代码文件中,注释莫名其妙地变成了乱码。
- 可能是发送给别人的文本,打开都是“锟斤拷”。
- 可能是从一个程序拷贝到另一个程序,莫名其妙的丢失内容。
- 可能是VS编译时,不停的提示“warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss”
- 在某些字体下面,明明显示的很好的符号,更换字体就显示的乱七八糟。甚至直接是方框。
受限于早期系统设计的百花齐放,各大语言为了满足自己的需要发明了本国方言。
为了统一度量衡,Unicode应运而生。
但是即使是Unicode,也出现了UTF-8,UTF-16,UTF-32这样细分编码。
在B站上,有一个非常详细的字符编码讲解视频。其中涉及到编码的发展史,统一历程,以及锟斤拷这样的乱码究竟时怎么样产生的。非常推荐大家更加直观的了解Unicode编码是如何一统天下的。
有兴趣的可以移步观看。↓↓↓
锟斤拷�⊠是怎样炼成的——中文显示“⼊”门指南【柴知道】】
一、编码对比
1. ASCII
- 每个字以1个字节来组成。
- ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。
2. GB2312 / GBK / GB18030 / Big5
- 简体使用GB2312最广
- 繁体使用Big5最广
- GB18030最全,基本兼容GBK。GBK完全兼容GB2312。
① GB2312
- 每个字以2个字节来组成。
- 共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。
② GBK
- 每个字以2个字节来组成。
- 共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。
③ GB18030
- 每个字可以由1个、2个或4个字节组成。
- GB18030-2005,以汉字为主并包含多种我国少数民族文字(如藏、蒙古、傣、彝、朝鲜、维吾尔文等)的超大型中文编码字符集强制性标准,其中收入汉字70000余个。
④ Big5
- 每个字以2个字节来组成。
- 使用繁体中文(正体中文)社区中最常用的电脑汉字字符集标准,共收录13,060个汉字。
3. UCS
- 通用多八位编码字符集(Universal Multiple-Octet Coded Character Set)也叫通用字符集(Universal Character Set, UCS),是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。
- 由国际标准化组织(ISO)制定。
4. Unicode(UTF-8,UTF-16,UTF-32)
① 占用空间不同
- UTF-8,每个字可以由1个、2个或4个字节组成。占用空间小,适合传输。
- UTF-16,每个字可以由2个或4个字节组成。
- UTF-32,每个字可以由4个字节组成。占用空间大,存在浪费。
② 查找速度不同
- 由于UTF-8和UTF-16是变长编码。计算1000个文字的size需要遍历每一个字符进行计算。随机访问速度慢。
- UTF-32是固定长度编码。计算1000个文字的size,可以直接*4,随机访问速度快。
二、VS编码转换插件推荐
FileEncoding
该插件可以在文本编辑器右下角直接查看当前文件编码,点击更换可直接进行编码转换。非常方便。
安装路径:Visual Studio MarketPlace