字符常见的编码方式

本人是做嵌入式开发的,当初第一次接触MDK时,被一个问题疑惑过,那就是在keil中的汉字注释复制到别的地方会出现乱码,还有编代码的时候,总会选择UTF-8编码方式。带着这些疑问我在网上搜索了一些东西,自己整理了一下,希望可以帮到同样疑惑的你。
其实常见的字符编码方式就那几种:Unicode、ASCII、GBK、GB2312、UTF-8。

1.ASCII码
ascll码,目前计算机中用得最广泛的字符集及其编码。美国标准信息交换标准码(Amercian Standard Code for Information Interchange,ASCII)
由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCaII码有7位码和8位码两种形式。

2.扩展的ASCII码
  原本的ASCII码对于英文语言的国家是够用了,但是欧洲国家的一些语言会有拼音,这时7个字节就不够用了。因此一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使 用的编码体系,可以表示最多256个符号。但这时问题也出现了:不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码 中代表了é,在希伯来语编码中却代表了字母Gimel (?),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。这个问题就直接促使了Unicode编码的产生。
  3.Unicode符号集
  正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。而Unicode就是这样一种编码:它包含了世界上所有的符号,并且每一个符号都是独一无二的。比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表 。很多人都说Unicode编码,但其实Unicode是一个符号集(世界上所有符号的符号集),而不是一种新的编码方式。
  但是正因为Unicode包含了所有的字符,而有些国家的字符用一个字节便可以表示,而有些国家的字符要用多个字节才能表示出来。即产生了两个问题:第一,如果有两个字节的数据,那计算机怎么知道这两个字节是表示一个汉字呢?还是表示两个英文字母呢?第二,因为不同字符需要的存储长度不一样,那么如果Unicode规定用2个字节存储字符,那么英文字符存储时前面1个字节都是0,这就大大浪费了存储空间。
  上面两个问题造成的结果是:1)出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。2)unicode在很长一段时间内无法推广,直到互联网的出现。
  4.UTF-8
  互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
  UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有两条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
  5.GBK/GB2312/GB18030
  GBK和GB2312都是针对简体字的编码,只是GB2312只支持六千多个汉字的编码,而GBK支持1万多个汉字编码。而GB18030是用于繁体字的编码。汉字存储时都使用两个字节来储存。

字符常见的编码方式详解相关推荐

  1. 计算机编码方式详解(Unicode、UTF-8、UTF-16、ASCII)

    整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的"另存为",可以在GBK.Unicode.Unicode big endian和UTF-8这几种编码方式间相互转 ...

  2. 各种音频编码方式详解

    内容简介:文章介绍了PCM编码.WMA编码.ADPCM编码.LPC编码.MP3编码.AAC编码.CELP编码等,包括优缺点对比和主要应用领域. PCM编码(原始数字音频信号流) 类型:Audio 制定 ...

  3. Unicode、UTF 和 ISO-8859-1等编码方式详解与浏览器URL编码

    将字符转换为二进制码的过程,我们称为编码,将二进制码转换为字符的过程,我们称为解码. 编码和解码时所采用的规则,我们称为字符集 常见的字符集: ASCII - 美国人编码,使用7位来对美国常用的字符进 ...

  4. Java编码ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式详解

    1 ASCII American Standard Code for Information Interchange.最早最通用的单字节编码系统,因为发明时间早,所以ASCII编码表的设计较为简单. ...

  5. java asn.1编码_ASN.1编码方式详解

    ASN ASN.1 – Abstract Syntax Notation dot one,抽象记法1.数字1被ISO加在ASN的后边,是为了保持ASN的开放性,可以让以后功能更加强大的ASN被命名为A ...

  6. iOS 中的编码方式详解(主要讲解Unicode)

    当你在处理文本时,如果你不是在写一些非常古老的代码(legacy code),那么你一定要使用 Unicode.幸运的是,苹果和 NeXT 一直致力于推动 Unicode 标准的建立,而 NeXT 在 ...

  7. C/C++字符数组的输入输出方式详解

    字符是C/C++读入数据最主要的类型.本篇将介绍单个字符数组/多个字符串及二维数组的输入输出方式与相关函数. 目录 单个字符串处理 ​编辑 输入 逐个元素输入 整体串形式输入 输出 逐个输出 整体串形 ...

  8. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

    Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...

  9. java中文字符怎么保证出现正确_JAVA中文字符编码问题详解

    JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...

最新文章

  1. MySQL添加字段和修改字段的方法
  2. insert数据时,获取插入数据的id
  3. SQLite的ADO.NET Provider支持ADO.NET Entity Framework
  4. 正斜杠( / )和反斜杠( \ )的区别
  5. vue 安装指定版本swiper_Vue中的runtime-only和runtime-compiler
  6. java的reentrantlock_Java并发之ReentrantLock详解
  7. php 面向接口,php开发app接口
  8. C++的C4305和C4800的编译警告
  9. 4412的linux启动原理,友坚科技三星4412开发板Linux平台下UT4412BV03裸机开发指南(十一)...
  10. 生物信息学中的机器学习:使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?
  11. App测试流程及测试点
  12. autosub字幕自动识别生成-最新windows配置方法
  13. 针对m3u8视频加密的一些尝试
  14. 2021-05-07:set,hashmap,collisions, map 242 1 15 18
  15. 内容都是XXXXX 如何把他们批量的插入表中
  16. 数组和广义表 - [数据结构]
  17. 好用的Linux数据库管理工具推荐!
  18. 蛋白质的数据预处理个人笔记(2)
  19. 物联网周刊(第 1 期):电动汽车的未来
  20. 增值电信服务费是什么意思_中国移动的增值业务费是什么意思

热门文章

  1. 点击按钮实现直接播放视频功能
  2. 【OpenCV】OpenCV函数精讲之 -- moveWindow函数用法详解
  3. sketchup自学教程_su草图大师快捷键与如何渲染
  4. CR LF,CR,LF的区别
  5. 登录用友时显示不能建立跟服务器的连接,用友GRPR9乡财县管管理软件登录时提示“无法与中间层服务器建立连接,请重新设置中间层”的解决办法知识课件(11页)-原创力文档...
  6. 【毕业设计_课程设计】宜居城市信息可视化平台
  7. FastDFS服务器端运行时目录结构讲解
  8. 如何谦虚回复别人夸奖
  9. centos7 kdump、crash调试内核
  10. DataGrip 入门操作指南