在《Python中文件的读取》与《Python中文件的写入》中提到通过文件对象调用read()函数和write()函数实现文件的读写。以上方法能够正确地取或写入英文时,当要读写的内容是中文时,则需要考虑编码方式。
1 读取已经存在的数据
1.1 创建文件
创建一个txt文件,在该文件中输入中文内容“你好世界”,可以看到该文件的编码方式是“UTF-8”,如图1所示。
图1 新建txt文件
相关链接1 UTF-8编码,是Unicode Transformation Format即可变长字符编码的简称,使用UTF-8编码,英文字母用一个字节表示,中文汉字用三个字节表示。“你好世界”这四个中文汉字的UTF-8编码如图2所示。
图2 “你好世界”的UTF-8编码
1.2 读取文件
1.2.1 未指定编码方式
使用图3所示的代码读取文件。
图3 未指定编码方式读取文件的代码
此时,open()函数没有指定使用何种编码方式读取文件,因此打印出来的内容是乱码。
1.2.2 指定编码方式
open()函数的encoding参数指定了以何种编码方式读取文件,代码图4所示。
图4 指定编码方式读取文件的代码
以上代码中,使用了“UTF-8”编码方式读取文件内容,此时的输出是“你好世界”。
2 读取Python代码写入的数据
在读取Python代码写入的数据时,应使用与写入时使用的相同编码方式。例如,在写入时使用“gbk”方式,那么在读取时必须也要使用“gbk”方式,而不能使用“UTF-8”的方式。
相关链接2 GBK编码,Chinese Internal Code Specification即汉字内码扩展规范的简称,其中K是汉语“扩展”的拼音“KuoZhan”的简写。无论英文字母还是中文汉字,都是用两个字节表示,如图5所示。
图5 “你好世界”的GBK编码
2.1 使用指定方式写入数据
使用“GBK”编码方式向data.txt文件中写入“你好世界”,代码如图6所示。
图6 指定编码方式向文件中写入数据的代码
打开data.txt,此时可以看到该文件的编码方式是“ANSI”,如图7所示。
图7 使用Python代码写入的txt文件
相关链接3 ANSI编码,是American National Standards Institute即美国国家学会标准的简写,在简体中文的操作系统中,ANSI编码代表的就是GBK编码。
2.2 使用相同的编码方式读取文件
读取文件的代码如图8所示。
图8 使用相同的编码方式读取文件
如果读取时使用的编码方式与写入时不同,则无法正确读取数据,如图9所示。
图9 使用不同的编码方式读取文件