txxcat 发表于 2020-3-18 10:32:53

避免打开文本文件出现编码错误的一个小技巧

本帖最后由 txxcat 于 2020-4-22 18:54 编辑

Windows7之前的文本文件默认格式是GBK,Windows10的默认格式是utf-8,而Python打开文件默认是GBK,碰到utf-8的文件在读取时候就会报错,反过来,指定utf-8打开碰到GBK的时候又会报错。其实用一下try-except就可以很方便的避开这个错误了,因为当前碰到的编码问题大部分只涉及到这两种,所以下面代码可以应对99%的状况:
def copen(filename):
    try:
      f = open(filename,encoding='GBK')   #用GBK码打开文件
      try:
            f.read()      #尝试读取,如果报错,执行except后的语句
            f.seek(0)         #如果读取正常,把指针复位
      except UnicodeDecodeError:
            f = open(filename,encoding='utf-8',errors='ignore')      #用utf-8码打开文件,errors='ignore':如果再有错就忽略,估计99.9%的文本文件不是GBK就是UTF-8,但还是要防止剩下的那么一点点可能
    except (OSError,AttributeError) as reason:               #碰到其他错误报个错
      print(str(reason))
      return None
    return f

f=copen(r'd:\test\test.txt')
if f:
    print(f.read())

斐波纳税 发表于 2020-4-10 21:13:44

没有报错,但是读出来的是乱码怎么解...

txxcat 发表于 2020-4-10 22:38:37

斐波纳税 发表于 2020-4-10 21:13
没有报错,但是读出来的是乱码怎么解...

难道是剩下的0.1%?你能把文件传给我分析一下吗?

斐波纳税 发表于 2020-4-11 12:51:58

txxcat 发表于 2020-4-10 22:38
难道是剩下的0.1%?你能把文件传给我分析一下吗?

好像不能上传txt,放网盘了
链接: https://pan.baidu.com/s/1WOXsVArBypX1LYrz7AjjnA 提取码: j62h

txxcat 发表于 2020-4-11 22:04:34

斐波纳税 发表于 2020-4-11 12:51
好像不能上传txt,放网盘了
链接: https://pan.baidu.com/s/1WOXsVArBypX1LYrz7AjjnA 提取码: j62h

你的文件是GBK的文件,测试了一下,用utf-8强制打开就出现你的那种情况。这段语句不太严谨,只要前三句有任意错误,就会执行后面的utf-8打开的语句,所以我改了一下代码,写成了一个函数。

leon_xinxin 发表于 2020-4-11 22:59:00

学到了!这编码很缠人

小泉app 发表于 2020-4-24 00:41:55

谢谢,用win10,被这encoding缠了好长时间。。。。
页: [1]
查看完整版本: 避免打开文本文件出现编码错误的一个小技巧