python文件操作编码问题

用python开发系统时经常需要读写外部文件,因此我把外部文件的读写方式做一个简单的总结。这里以txt文件为例,展示一下python读写外部文件的常用代码。

将有一段字符串的txt文件分别保存成ANSI和utf-8格式,如下图所示(下方的编码可以设置保存格式)。
tips:如果需要查看txt文件的编码格式,也可以打开文件,点击另存为,查看文件当前的编码。
这里写图片描述

实现编码文件读取的代码如下所示。

import codecs,time
#
dir_read = "TestResource\\"
ansi_file = "ansi.txt"
utf8_file = "utf-8.txt"
try:
    f_gbk_gbk = codecs.open(dir_read+ansi_file,encoding="gbk")
    print("f_gbk_gbk = "+f_gbk_gbk.readline())
    f_gbk_gbk.close()
except Exception:
    print("f_gbk_gbk error")

try:
    f_gbk_utf8 = codecs.open(dir_read+ansi_file,encoding="utf-8")
    print("f_gbk_utf8 = "+f_gbk_utf8.readline())
    f_gbk_utf8.close()
except Exception:
    print("f_gbk_utf8 error")

try:
    f_utf8_utf8 = codecs.open(dir_read+utf8_file,encoding="utf-8")
    print("f_utf8_utf8 = "+f_utf8_utf8.readline())
    f_utf8_utf8.close()
except Exception:
    print("f_utf8_utf8 error")

try:
    f_utf8_gbk = codecs.open(dir_read+utf8_file,encoding="gbk")
    print("f_utf8_gbk"+f_utf8_gbk.readline())
    f_utf8_gbk.close()
except Exception:
    print("f_utf8_gbk error")

这段代码的运行结果如下:

f_gbk_gbk = 暗示法王企鹅分为发改委隔热管
f_gbk_utf8 error
f_utf8_utf8 = 暗示法王企鹅分为发改委隔热管
f_utf8_gbk error

结论:因此对ANSI格式的txt,通过gbk编码格式读取;对utf-8格式的txt,通过utf-8编码格式读取。

在读取文件时经常会遇到编码问题,python对编码问题的支持很到位(python的编码过程:读取文件的原有编码->python内部编码->显示的文件编码)。开发者可以通过使用codecs包来处理编码问题,用例在以上代码中已经展示。


这里补充一下python3的文件编码机制(与python2不同,python2中的字符串并不默认以unicode编码表示,操作时常常需要添加decode函数):python3中的所有字符串都是Unicode编码,在将文本数据读入内存时python3会自动将文件内容转换成unicode编码格式。但文件本身的编码格式需要在Open文件时指定(默认编码是gbk),才能转换成unicode。

另外补充一些常见编码问题的解决方法:
1.编码默认gbk,而文件是utf-8编码的,用gbk编码格式操作utf-8编码文件会出现编码解析错误。因此需要在open中添加编码方式(open(file,encoding=”utf-8”))

猜你喜欢

转载自blog.csdn.net/u012614287/article/details/53782973