五分钟战胜 Python 字符编码

387 查看

对于很多接触Python的人而言,字符的处理和语言整体的温顺可靠相比显得格外桀骜不驯难以驾驭。

本文不谈复杂的理论,就经验教你字符处理八字真言:确定编码,同类交互。

文章针对Python 2.7,主要因为3对的编码已经有了很大的改善并且实际原理一样,更改一下操作命令即可。

了解完本文,你可以轻松解决文字处理,特殊平台(Windows?)下的编码,爬虫编码等问题。

阅读建议

本文分为如下几个部分:

  • 原理
  • 具体操作
  • 建议的使用习惯
  • 疑难问题解答

如果想要了解我给出的使用习惯,可以直接跳到建议的使用习惯。

如果只想要解决相关问题可以直接跳到疑难问题解答。

希望本文能够帮到你。

原理

为了理解方便,这里不谈理论只做类比,具体想要进一步了解各种编码的理论的搜狗一下好了。

首先说一下我们为什么会碰到各式各样的编码问题:

  • 因为我们没有统一编码
  • 因为我们没有用对命令(传对数据)

再说一下编码是什么,Python的编码看似复杂,实际上可以看做只有两类编码:Unicode,二进制

  • Unicode 相信都很熟悉:,就是\u0000这样的
  • 二进制编码也很简单,就是\x00\x00这样的,平常看到的utf-8,cp936都是二进制编码
  • 二进制编码是具象的,10001100原样就可以存储,而Unicode是抽象的,不能这样存

再说怎么做,就是只有同种编码之间才可以操作

  • 举个简单的类比
  • 这里说的同种就是我们熟悉的各种编码方式:utf-8,unicode,ucs-bom
  • 这也就是编码问题的核心,非常重要。

最后说一下Python的环境

  • 本身代码是用Ascii解码的,文件里有Ascii无法解码的内容的话要告知Python怎么解码
  • 内部大量命令都是默认接受Unicode

具体操作

拿到各种编码的内容自然是不用说,那么如果我们想要自己构造怎么做呢,看下面:

那么他们之间怎么转换呢,同样很简单:

那么怎么样会出现问题呢:

所以我们需要确定程序使用的编码,这是我们需要告诉程序的东西

  • 一方面在操作字符串的时候确定是同种编码
  • 另一方面在使用非自己写的命令时,一般使用Unicode,或者使用接收二进制编码的命令