Python 读写文件的编码与解码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 读写文件的编码与解码问题相关的知识,希望对你有一定的参考价值。

参考技术A

演示文件为docx文档,内容如下:

源码

运行源码查看报错信息
UnicodeDecodeError: \'gbk\' codec can\'t decode byte 0xab in position 15: illegal multibyte sequence

上述错误是一种很常见的解码错误,下面介绍该错误的解决方法

把utf-8,gbk等各种编码方式都试了一遍,还是没有解决问题然后仔细看报错信息,根据UnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xfb in position 14: invalid start byte,猜测文件中某个字节不能解码,打开文件一看,并没有看出什么问题来

open() 函数的第三个参数不是用来接收编码方式的,而是传入一个buffering的值,此处传入了\'gbk\'字符串,所以系统提示传一个整型


通过调用office的API进行操作,因为在office上能完成的操作,都能通过win32完成,所以我们选择使用win32
(Python3.5 需要安装 win32compat,里面含了 win32 的很多包)

原创python中文编码问题深入分析:python2.7文件读写中文编码问题

  上一篇文章介绍和分析了python2.7中使用print遇到的中文编码问题的原因和解决方案,本篇主要介绍一下python2.7中执行文件读写可能遇到的编码问题。

  1.文件读取

   假如我们读取一个文件,文件保存时,使用的编码格式,决定了我们从文件读取的内容的编码格式,例如,新建一个文本文件test.txt, 编辑内容,保存的时候注意,编码格式设定为gb2312,那么使用python读取文件内容,方式如下:

技术分享
f = open(test.txt‘,r)
s = f.read() #读取文件内容,如果是不识别的encoding格式(识别的encoding类型跟使用的系统有关),这里将读取失败
‘‘‘假设文件保存时以gb2312编码保存‘‘‘
u = s.decode(gb2312‘) #以文件保存格式对内容进行解码,获得unicode字符串
‘‘‘下面我们就可以对内容进行各种编码的转换了‘‘‘
str = u.encode(utf-8‘)#转换为utf-8编码的字符串str
strGbk = u.encode(gbk‘)#转换为gbk编码的字符串str1
技术分享

  注意:1)调用read()函数文件test.txt时,如果test.txt文件中不包含BOM信息(BOM信息一般是3个字节,用于标识文件的编码格式),则系统会使用现在支持的文件编码格式(utf-8,gbk等,优先使用utf-8,最后使用系统默认的编码方式),尝试着读取和解析text.txt,如果能打开并解析成功(假设以gbk编码方式能正确打开test.txt),那么s的编码类型gbk 。

     2)如果open时使用的encoding和文件本身的encoding不一致的话,那么这里将将会产生错误

     3)s的类型为str

  此外,python提供了codecs包,可供进行文件的读取,包中的open()函数可以指定文件编码的类型:

import codecs
f = codecs.open(text.text‘,r+‘,encoding=utf-8)#必须事先知道文件的编码格式,这里文件编码是使用的utf-8
content = f.read()#如果open时使用的encoding和文件本身的encoding不一致的话,那么这里将将会产生错误
f.write(你想要写入的信息)
f.close()

  注意:1)必须事先知道文件的编码格式,这里文件编码是使用的utf-8   2)如果open时使用的encoding和文件本身的encoding不一致的话,那么这里将将会产生错误

     3) content的类型为unicode。

  2.文件写入 

    调用python文件写入函数时,如果待写入变量unStr是unicode类型,则系统首先使用系统的默认编码方式,将unStr变量进行unicode编码成str的类型,然后再写入文件。

unStr=u"测试"
f = open(test.txt‘,w) f.write(unStr) #如果系统的默认编码是asii,则会出现UnicodeEncodeError问题

    如果系统的默认编码方式是ascii,则就会出现上文中提到的UnicodeEncodeError问题。解决方法有两个:

    1) 首先获取文件的默认编码格式,执行write函数前,将unStr编码成文件的默认编码格式,例如:在我的机器上,创建一个新文件时,其文件编码格式为utf-8,则修改f.write(unStr) f.write(unStr.encoding(‘utf-8‘))。(建议选这一种)

    2) 修改系统的默认编码方式为utf-8;

    至此,python2.7中有关中文编码的相关问题分析及解决已接近尾声,由于笔者水平有限,难免出现错误和不当的地方,希望大家多多指正。

 



以上是关于Python 读写文件的编码与解码问题的主要内容,如果未能解决你的问题,请参考以下文章

java 按字节读写二进制文件(Base64编码解码)

Python文件读写中的四大操作

原创python中文编码问题深入分析:python2.7文件读写中文编码问题

3.文件操作及编码解码补充

python文件数据库读写编码的问题

GoLang读写数据---下