Python文件中的编码
Python 默认脚本文件都是 ANSCII 编码的,当文件中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示"来修正一个 module 的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明:# -- coding=utf-8 -- 或者 #coding=utf-8,其他的编码如:gbk、gb2312也可以。或者也可以理解成外界有繁多的编码形式,如utf8、gbk等,而PC内部只有ANSCII编码。
Python中的编码与解码
经常遇见两个函数,其一:encode:表示编码,(将一个unicode对象转换为参数中编码格式的普通字符)代表从PC到外部;其二:decode:表示解码,(将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象)代表从外部读取到PC。
例如:
这里PC会首先对s自动的进行decode操作,由于没有指定解码方式,所以Python会使用sys.defaultencoding指明的方式进行解码(默认的是anscii编码),然后再进行编码操作,使用方式是gb2312。但是这样假若s的编码方式不是anscii编码,则会存在隐患,解决办法:
法一:明确指出s的编码方式:
这里为首先用utf-8进行解码,然后用gb2312进行编码
法二:更改默认的编码方式:
最后如果在实际开发中遇到非法字符,使用上述编码和解码方式会出现报错
这时候一种解决办法就是直接忽略非法字符:
Python读取不同编码文件
读:在读取文件时,文件解码方式要与文件存储的编码方式相同。例如打开“utf-8”格式存储的文件
读取文件时还存在一个问题:在某些软件,如notepad,在保存一个以utf-8编码的文件时,会在文件开始的时候插入三个不可见字符(0xEF 0xBB 0Xbf ,即BOM),因此读取时需要自己去掉这些字符,一种解决办法如下:
Python中的两种字符串类型
在Python中有两种字符串类型,分别是str和unicode。由于Python默认是ANSCII编码,所以如果想要将str转换成特定编码类型,需要把str转换成Unicode,然后从Unicode转换为特定的编码类型,如utf8、gbk等。
其一:
表示用unicode编码方式存储信息
其二:
表示未指定编码方式,这时PC会自动的利用sys.defaultencoding指定的方式进行解码(默认的是anscii解码)然后存储成unicode编码形式
一个简单例子:
总结:
一般对于python文件,规定使用固定的一种编码方式。具体方法:可以在代码文件开头使用