目前在做的项目中,有一个列表用到的数据没有找到能直接满足需求的数据,给到我的文件里面是一张sql表,需要自己从sql表中,洗出自己需要的数据,于是想到了Python.
在使用python读取文件的时候,报了下面的错误:UnicodeDecodeError: 'utf8' codec can't decode byte 0xb1 in position 0: invalid start byte.
网上一开始查到帖子说是编码格式不对,需要在python 文件的顶上添加 # codeing= utf-8
,以支持中文编码,由于给到的sql 文件中,确实含有中文,于是就加上了上面的utf-8的支持,满怀希望的执行Python程序,结果还是报了同样的错。
经过一番查找,找到了真正的解决方法,就是文件的编码格式不对,需要在文件读取的时候设置正确的编码格式,或者直接修改文件的编码格式为程序默认支持的格式。解决方法如下:
1、查看文件的编码格式:
vim/vi编辑器(进入esc命令模式),执行
set fileencoding,查看文件的编码格式,在Python程序中把文件读取时的格式设置为该编码格式,即能正确读取文件。
2、更改文件的编码格式:
vim/vi编辑器(进入esc命令模式),执行命令,
set fileencoding=utf-8,然后回车,此时我们将文件的格式改成了utf-8格式的了,使用utf-8读取,就能正确的读出文件。
总结
1、在Python文件顶部添加 `#encoding=utf-8`,只是设置当前Python文件支持中文的输入,并不能真正解决读取的文件的编码格式不支持的问题。
2、遇到读取的文件格式不支持的情况,正确的的做法还是,查看文件真正的编码格式,在程序读取的文件的时候,设置正确的编码格式;或者修改文件的编码格式为我们程序支持的格式。