utf8编码的py文件的open问题

时间:2024-11-18 17:40:35

Linux下使用python2.7-utf8编码写的一个博客系统,切换到MS平台上,遇到最突出的不兼容问题就是编码问题:中文乱码。尤其在dos下,输出会进入繁体字世界。对于dos下中网乱码解决办法这里不赘述了,自行搜索,但是有个特殊的问题,由于网上提供的办法不适用,这里记一笔

Q:utf8编码的文件使用open打开read时,报错

UnicodeDecodeError: 'gbk' codec can't decode byte 0x9d in position 1270: illega
  • 1

意思明了,使用指定读写编码格式

open(file_path, 'r', 'utf-8')
  • 1

报错

TypeError: an integer is required [closed]
  • 1

然后Stack Overflow一下,尝试

open(file_path, 'r', encoding='utf-8')
  • 1

提示没有encoding参数,help(open),的确参数不对,估计上面的用法是“远古时代”的open,现已进化

A:终极解决办法使用二进制读写

html = open(file_path, 'rb')
或者
html = open(file_path, 'wb')
  • 1
  • 2
  • 3

为了确保utf8,在读写时再执行一次转换

html.read().encode('utf-8')
html.write(('utf-8'))
  • 1
  • 2

如此确保依然使用utf8编码,使得python程序在切换平台时不改变utf8编码。

说明:对于dos终端下输出乱码这样情况,由于我的系统是操作文件的,只要保证文件格式正确即可,对终端输出不是重点,因此无需切换到gbk编码。print需要的时候encode一把。