简单理解编码

作者: 时间点滴 | 来源:发表于2016-10-03 07:23 被阅读0次

适用对象

1、计算机相关类的技术人(研发、测试等)
2、对计算机编码感兴趣的其它人士
3、想知道为什么会出现乱码的人

本文的目的

本文从实用角度出发,并不会严格按照编码的规范来书写,如,字符集对应的字符编码名称并不准确,但不影响读者对编码整体的理解。主要目的是让读者对编解码有个初步的了解,以计算机中为什么会出现乱码。

为什么需要编码


  计算机能理解的语言是二进制的(0,1),人类的语言(英文、中文以及其它语言)计算机是无法直接理解的,同样,计算机的二进制语言,人类也是无法直接理解的,所以需要进行转换,这个转换的过程就叫编解码。
  由字符到字节叫编码,由字节到字符叫解码。

字符集与字符编码

计算机中存储信息的最小单元(能表示一个具体含义的内容,不是最小单位)是字节,一个字节包括8个二进制位(最小单位是位bit)。
  用一个字节表示世界上所有的语言是不够的(2的8次方),所以人们又发明了字符的概念,用多个字节表示一个字符,不同语言有不同的字符集以及与对应二进制的转换关系。
  字符的集合体叫做字符集,字符与二进制的转换规则叫做编解码。很多时候,我们说的ASCII编码,其实是包含了ASCII字符集以及其对应的字符编码,只不过很多字符集只有一种编码,所以才不会有问题,Unicode除外。

常见的字符集与字符编码:

| 字符集 |字符编码 |简单介绍 |
| ------- :| --------- :| -------- :|
| ASCII | ASCII |单字节,使用了7位 |
| ISO-8859-1 | ISO-8859-1 |也叫Latin-1,单字节,扩展了ASCII,可解码ASCII |
| GB2312 | GB2312 |小于0XFF用单字节,否则用双字节|
| GBK | GBK |扩展GB2312,规则同上,可解码GB2312|
| Unicode | UTF-8 |变长1-6字节|
| Unicode | UTF-16 |双字节|
| Unicode | UTF-32 |定长四字节|

造成乱码的原因

通过上面了解了什么叫做编码,以及字符集与字符编码,现在讲一下乱码是因为什么原因造成的。
  以中文字符“我”为例,我的Unicode码是6211(UTF-16编码,十进制是25105)。

1、经过GBK编码,然后再进行ISO-8859-1解码

  一个字符的“我”字,进行GBK编码,一个字符采用双字节表示(小于0XFF除外),然后再进行ISO-8859-1解码,一个字节对应一个字符,最终变成了两个字符。

2、经过ISO-8859-1编码再经过ISO-8859-1解码

  进行ISO-8859-1编码,一个字符采用单字节表示,6211超出了其编码范围,所以用3f表示(未知),然后再进行ISO-8859-1解码,一个字节对应一个字符,最终变成了1个字符的“?”。
  其它编码流程大体同上,还有更复杂的组合场景,如,将图1的结果再进行GBK编码与GBK解码(结果如何呢?)。
  总之以上问题,都是因为在编码与解码的时候没有使用合适的字符集以及对应字符编码才导致出现了乱码的场景。

总结

本文首先介绍了什么叫做编码,为什么我们需要编码,然后介绍了常见的字符集以及对应的字符编码,最后介绍了乱码的原因。读者再理解了以上内容之后,如果在日常工作中再遇到编码问题,可以根据本文的内容进行分析,希望能帮到大家。

相关文章

  • 简单理解编码

    适用对象 1、计算机相关类的技术人(研发、测试等)2、对计算机编码感兴趣的其它人士3、想知道为什么会出现乱码的人 ...

  • Html5 音视频

    音视频基础知识 简单理解- 视频:连续的画面,特定格式编码,媒体流形式- 音频:特定格式编码,媒体流形式 格式- ...

  • 你用了十几年的学习方法,有可能全是错的(二)

    (接上篇) (三)编码 简单地说,编码就是理解的过程。 读取是信息从环境进入工作记忆,而从工作记忆进入长期记忆之前...

  • 简单理解 ASN.1 / DER / x509 / PKCS /

    简单理解 ASN.1 / DER / x509 / PKCS / PKIX ASN.1: 是一套 表示、编码、传输...

  • 编码浅谈

    为什么要熟悉编码的本质?深入理解计算机软硬件知识深入理解计算机背后的语言 一、先来理解编码 广义的理解:编码就是交...

  • 计算机溢出问题(1)

      大多数机器对整数使用补码编码,而对浮点数使用IEEE标准754编码。在位级上理解这些编码,且理解其算术运算的数...

  • KVC与KVO

    KVC和KVO,其实用起来还是比较简单的,KVC(Key-value coding)可以理解为键值对编码,如果对象...

  • 决策树的python实现

    本文结构: 是什么? 有什么算法? 数学原理? 编码实现算法? 1. 是什么? 简单地理解,就是根据一些 feat...

  • python 字符 编码 简述

    字符编码问题很简单,当你可以区分以下几种概念之后: 字节编码与字符编码 字节串与字符串 文件编码、IDE编码、其他...

  • iOSKVC 底层原理探索

    一,概念 KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,...

网友评论

    本文标题:简单理解编码

    本文链接:https://www.haomeiwen.com/subject/zkukyttx.html