在Linux下使用python2.7-utf8编码写的一个博客系统,切换到MS平台上,遇到最突出的不兼容问题就是编码问题:中文乱码。尤其在dos下,输出会进入繁体字世界。对于dos下中网乱码解决办法这里不赘述了,自行搜索,但是有个特殊的问题,由于网上提供的办法不适用,这里记一笔
Q:utf8编码的文件使用open打开read时,报错
UnicodeDecodeError: 'gbk' codec can't decode byte 0x9d in position 1270: illega
意思明了,使用指定读写编码格式
open(file_path, 'r', 'utf-8')
报错
TypeError: an integer is required [closed]
然后Stack Overflow一下,尝试
open(file_path, 'r', encoding='utf-8')
提示没有encoding参数,help(open),的确参数不对,估计上面的用法是“远古时代”的open,现已进化
A:终极解决办法使用二进制读写
html = open(file_path, 'rb')
或者
html = open(file_path, 'wb')
为了确保utf8,在读写时再执行一次转换
html.read().encode('utf-8')
html.write(body.encode('utf-8'))
如此确保依然使用utf8编码,使得python程序在切换平台时不改变utf8编码。
说明:对于dos终端下输出乱码这样情况,由于我的系统是操作文件的,只要保证文件格式正确即可,对终端输出不是重点,因此无需切换到gbk编码。print需要的时候encode一把。