常用编码的对比(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

三、参考资料

【GiraKoo】常用编码的对比(ASCII,GB2312,GBK,GB18030,UCS,Unicode)的更多相关文章

  1. 字符编码-ASCII,GB2312,GBK,GB18030

    ASCII ASCII,GB2312,GBK,GB18030依次增加,向下兼容. 手机只需要支持GB2312 电脑中文windows只支持GBK 发展历程 如果你使用编译器是python2.0版本,默 ...

  2. 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   普通的linux 和 普通的windows.    ...

  3. 汉字编码:GB2312, GBK, GB18030, Big5

    前一篇博文:ANSI是什么编码?中有这样一段小故事: 话说计算机是由美国佬搞出来的嘛,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母.数字和常用特殊符号已经绰绰有余了(其实ASCII ...

  4. 编码格式简介:ASCII码、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM头

    编码格式简介:ASCII码.ANSI.GBK.GB2312.GB18030和Unicode.UTF-8,BOM头 二进制: 只有0和1. 十进制.十六进制.八进制: 计算机其实挺笨的,它只认识0101 ...

  5. GB2312,GBK,GB18030,UTF8四种汉字编码标准有什么差别和联系

     从GB2312.GBK 到 GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有同样的编码,后面的标准支持很多其它的字符.在这些编码中,英文和中文能够统一地处理. 区分中文编 ...

  6. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别(转载)

    原文出处:http://www.blogjava.net/xcp/archive/2009/10/29/coding2.html 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总结网上一些 ...

  7. ASCII,GB2312,GBK,Unicode,Utf-8

    1.ASCII:American Stardand Code for Information Interchange,是当时美国制定出来的一套编码系统,使用7位或8位二进制来表示西文字符,0-31以及 ...

  8. 第48篇 字符编码探密--ASCII,UTF8,GBK,Unicode

    原文地址:http://blog.laofu.online/2017/08/22/encode-string/ ASCII 的由来 在计算机的“原始社会”,有人想把日常的使用的语言使用计算机来表示, ...

  9. 编码标准:ASCII、GBK、Unicode(UTF8、UTF16、UTF32)

    英文编码(单字节字符集,码值范围0~127):字节最高位是0 ASCII编码,用于英文字符.中文编码(双字节字符集):首字节(8位)的最高位是1.可依据首字节最高位来判断中英文. GB2312, 旧版 ...

  10. 汉字编码 (GB2312 GBK GB18030)

    GB2312 收录简化汉字及符号.字母.日文假名等共7445个图形字符,其中汉字占6763个 每个符号都用两个字节表示,每个字节均采用七位编码表示,习惯上 第一个字节是高字节,第二个字节是低字节 GB ...

随机推荐

  1. 如何规避MyBatis使用过程中带来的全表更新风险

    作者:京东零售 贾玉西 一.前言 程序员A: MyBatis用过吧? 程序员B: 用过 程序员A: 好巧,我也用过,那你遇到过什么风险没?比如全表数据被更新或者删除了. 程序员B: 咔,还没遇到过,这 ...

  2. Go内存管理逃逸分析

    1. 前言 所谓的逃逸分析(Escape analysis)是指由编译器决定内存分配的位置吗不需要程序员指定. 函数中申请一个新的对象 如果分配在栈中, 则函数执行结束后可自动将内存回收 如果分配在堆 ...

  3. fortify Unsafe JNI

    Unsafe JNI 主要解决问题: 1.system.currentTimeMillis(); 使用SystemClock.now()替换. 2.isAssignableFrom(); 使用新定义的 ...

  4. 如何使用Mutex确保并发程序的正确性

    1. 简介 本文的主要内容是介绍Go中Mutex并发原语.包含Mutex的基本使用,使用的注意事项以及一些实践建议. 2. 基本使用 2.1 基本定义 Mutex是Go语言中的一种同步原语,全称为Mu ...

  5. 4.0 SDK Workshop 纪实:一起体验多人、多屏幕共享新功能

    在本月初,声网发布了 RTC Native SDK 4.0 版本.该版本提供了更高的开发灵活度,可明显提升实时场景开发效率,并让第三方插件开发更容易.上周六(8月20日),我们组织了一场小型的线下 W ...

  6. openwrt 刷回梅林或者原厂固件

    路由器刷了openwrt固件后,访问不了CFE恢复模式了.本人最近用腾达AC18路由器,刷了AC68U的梅林改版固件.但是后面再用CFE刷了openwrt固件之后,发现wifi不能用,所以又想刷回梅林 ...

  7. (数据科学学习手札151)速通pandas2.0新版本干货内容

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,前两天pandas正式发布了其 ...

  8. 系统评价——层次分析法AHP的R语言实现(四)

    对一个事物的评价往往会涉及多个因素或者多个指标,评价是在多个因素相互作用下的一个综合判断.多指标综合评价方法具有以下的特点:包含若干个指标,分别说明被评价对象的不同方面,评价方法最终要对被评价对象作出 ...

  9. python之修改本地Ip地址

    安装模块pip install wmi # -*- coding: cp936 -*- # # FileName: ModifyIP.py # Date : 2008-01-15 # import w ...

  10. 四月十九号java基础知识

    1.总括:类的继承是使用已有的类为基础派生出新的类.通过类继承的方式,便能开发出新的类,而不需要编写相同的程序代码,所以说类的继承是程序代码再利用的概念抽象与接口都是类概念的扩展.通过继承扩展出的子类 ...