鱼C论坛

 找回密码
 立即注册
查看: 1827|回复: 6

[技术交流] 避免打开文本文件出现编码错误的一个小技巧

[复制链接]
发表于 2020-3-18 10:32:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-10 21:13:44 | 显示全部楼层
没有报错,但是读出来的是乱码怎么解...
截屏2020-04-10 21.13.09.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-10 22:38:37 | 显示全部楼层
斐波纳税 发表于 2020-4-10 21:13
没有报错,但是读出来的是乱码怎么解...

难道是剩下的0.1%?你能把文件传给我分析一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 12:51:58 | 显示全部楼层
txxcat 发表于 2020-4-10 22:38
难道是剩下的0.1%?你能把文件传给我分析一下吗?

好像不能上传txt,放网盘了
链接: https://pan.baidu.com/s/1WOXsVArBypX1LYrz7AjjnA 提取码: j62h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-11 22:04:34 | 显示全部楼层
斐波纳税 发表于 2020-4-11 12:51
好像不能上传txt,放网盘了
链接: https://pan.baidu.com/s/1WOXsVArBypX1LYrz7AjjnA 提取码: j62h

你的文件是GBK的文件,测试了一下,用utf-8强制打开就出现你的那种情况。这段语句不太严谨,只要前三句有任意错误,就会执行后面的utf-8打开的语句,所以我改了一下代码,写成了一个函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 22:59:00 | 显示全部楼层
学到了!这编码很缠人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 00:41:55 | 显示全部楼层
谢谢,用win10,被这encoding缠了好长时间。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 20:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表