最近所做的项目中涉及到很多用Python处理文档的问题,被其中的编码问题弄得十分头大。个人做了一些研究,在此记录一下。
关于各种字符编码在此不赘述,可以参看廖雪峰:字符串与编码
1、中文字符串报错
在python中使用中文字符串,会出现一下错误:
Python 2.x的默认编码格式是ASCII,就是说,在没有指定Python源码编码格式的情况下,源码中的所有字符都会被默认为ASCII码。因此,字符串“哈哈”超出了ASCII码的表示范围,就会出现这个问题。
出现这个问题的原因是因为,
解决这个问题也很简单,在文件开头
# -*- coding: UTF-8 -*-,就能够将该文件的编码方式改成UTF-8编码
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。因此字符串在python内部都是unicode,而我们使用的str,其实可以说是unicode进过字符编码后的一个字符数组。
关于字符串的编码和解码如下:
通过上述代码我们还能发现一个问题:print str和print repr(str)的内容是不一样的。其中repr()代表将str转化为一个字符串。前者输出的是str在当前环境中所展示出来的内容,而后者则显示了str的编码内容。这样看或许不明显,我们在命令行模式下运行试试:
很显然,print将编码内容作了一次转换,将其编译成当前环境的编码方式
然后print也不是对任何对象都有这个功能的,看下面这个例子:
显然,在面对list对象时,print就失去了这个功能,那么想要输出list中具体的内容该怎么办呢?这里提供一种方法: