02python中文乱码

原文链接作者:百川一页
链接:https://www.jianshu.com/p/fd169427f2f9

基本概念

  • 比特位(Bit)
    是计算机最小的存储单位
    以0或1来表示比特位的值
    字节(Byte)
    是计算机中数据存储的基本单元
    一字节等于一个8个比特位
    字符(Character)
    是一个信息单位
    是各种文字和符号的统称
    字符集(Character Set)
    是某个范围内字符的集合
    不同的字符集规定了不同字符的个数
    字符码(Code Point)
    字符集中每个字符的数字编号
    字符编码(Character Encoding)
    是将字符集中的字符码映射为字节流的一种具体实现方案
    ASCII 编码、UTF-8 编码、GBK 编码
    编码(Encoding)
    编码的过程是将字符转换成字节流
    解码 (Decoding)
    解码的过程是将字节流解析为字符

乱码原因

  • 编码和解码不是使用同一套编码

既然乱码是由使用了不同的字符编码引起的;那为什么搞这么多套?合成一套,弄一个标准不就可以了?

  • 言之有理,但凡事都是一个发展进化的过程;
    而且,“大而全”不一定好;拖拉机拉货特别多;你能开着去上班吗?
    细看“字符编码”发展历程
    计算机最早发明于美国, 英语中主要就包括26个字母(大小写), 10个数字, 标点符号, 控制符等等; 所以, 最终就制定了ASCII字符编码, 映射了字符和字符码的关系, 并使用一个字节的后七位(0 - 127)来存储; (当时真TM没想到, 计算机会普及)
    慢慢计算机普及到西欧其他地区, 发现好多字符没法识别处理; 于是对ASCII进行了扩展, 叫 EASCII编码; 还是一个字节, 从128 – 255; 但是针对于这一块的扩充, 各个厂家各有自己的标准(比如当时比较有名的CP437); 最后导致互相之间没法沟通; 所以, 后来, 由国际标准化组织(ISO) 以及国际电工委员会(IEC)联合制定了一个标准 ISO/8859-1(Latin-1), 继承了CP437的128-159; 重新定义了160-255;
    然后到中国之后, 全都懵逼了; 汉字博大精深, 一个字节肯定不够; so, 国人自己搞了一个GB2312来存储中文, 6763个汉字;(双字节, 兼容ASCII) 可是, 一开始还很爽; 后来发现还有繁体字, 藏文, 蒙文, 维吾尔文… 懵逼X2; 于是一狠心, 搞了一个GBK, 全给他们搞进来;
    中国是搞定了, 那日本,韩国… … 如果到时候, 各有各的字符编码, 那该怎样沟通?比如 666 , 在中国代表NB; 在岛国代表SB, 那就乱套了; 所以, 统一联盟国际组织, 提出了Unicode编码; 涵盖了世界上所有的文字, 每一个字符都有对应的唯一一个字符码, 这回大家都开心了 但是, 针对于每个字符码, 使用几个字节存储的问题, 又存在几个不同的具体解决方案; 比如utf-8, utf-16, utf-32… 所以, 其实, 我们讨论这边编码的时候, 都是指Unicode编码

猜你喜欢

转载自blog.csdn.net/smartcongge/article/details/82726068