[python专题笔记]读文件乱码

当尝试以UTF-8格式读取包含乱码的文件时,会引发UnicodeDecodeError。文件中的不可识别编码导致解析失败。解决方法是使用二进制模式打开文件,然后使用`decode('utf-8', 'ignore')`忽略乱码部分。这样可以避免解析错误并继续处理文件内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1遇到文件中有错误编码的字符,会导致读取文件报错

一 现象

文件是想用utf-8解析,文件格式也是该格式,但是其中包含部分乱码,使用如下代码解析,会报错

f = open("test,txt", "r")
data = f.readline()

报错

    data = fb.readline()
  File "/usr/lib/python3.5/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 1: invalid start byte

二 原因

文件中出现,无法识别的编码(乱码),使用如上代码解析,会默认使用“utf-8”解析,但是遇到乱码部分无法解析,出现报错

 <<80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xf`à^^x^^`<86>~f<9e>`<98><86><98>^^f^^~fx^F^^~f<9e>`<98><9e>^^f^^~f<86><98>^^^^<98><86><98>ø<9e>ø^^~<86>`x<9e>`x       ø<98><86>à<98><86><98><98>~føxxþ^^f^^<9e>`^^xxþ^^x<86>~f<9e>`xàx^^æ<80><98><9e><80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xf`à`à`ø<9e><86><98>ø<9e>ø<9e><98>       <98>^^ø<9e>þ<86>æ<9e>~^^øx<86>^^<9e><86><98>ø<9e>ø<9e><98><98>^^ø<9e>þ<86>æ<9e>^F^^<9e>^F<9e>xf<98><86>^^<9e>à<9e>fxf^^^^f8~^Fx^^`x<9e>`x<86>~f<9e>`xàx^^xø<98><86><98>à<98><86><98><98>~fxæ<80><       98><9e><80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xf`à<98>àxxà`<9e><9e><80><9e><98><9e>øx<86>^^<9e><86><9e>`<9e><86>~<98><80>^^~^^<9e>`<9e>^^~<9e><86>x<98><       86><98><86>xþ<86>f~f<9e>`~x`xæ^Føxø<9e><86><9e>`^^x~^F^^~^^<9e>`<9e>^^~^^x<86>~f<9e>`<98><9e><9e>àx^^æææ<80><98><9e><80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^       `^^xf`àxx`~^F<9e>æ<9e><86><98>æ^^<9e><86>^^<9e><86><98>ø<9e>ø<9e><98><98>^^ø<9e>øx<86>^F<98>æ<9e><86>ø<98>ø<9e><86><80><9e>^F^^<9e>`^^^^fø~x`x^^æ^Føxà8æ<9e><86>ø<98>ø^^x<9e>^F^^<9e>`^^^^føxà<98       ><80>^^^^à^^fxà<86>x<86>~f<9e>`<98>þxàx^^xø<98><86>~æxxæ<80><98><9e><80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xf`à^^x`ø<9e><86>~`<98><98><9e>~<9e><86>^^<9e       ><86><98>ø<9e>ø<9e><98><98>^^ø<9e>øx<86>^F<98>æ<9e><86>ø<98>ø<9e><86><80><9e>^F^^<9e>`^^^^fø~~xx`<9e>`øà<98>æ<9e><86>ø<98>ø^^x<9e>^F^^<9e>`^^^^føxà<98><80>^^^^à^^fxà<86>x<86>~f<9e>`<98>þxàx^^xø       <98><86>~æxxæ<80><98><9e><80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xf`à<98>æ`^^à`~^F^^~^^<9e>þ<86>^^<9e><86><98>ø<9e>ø<9e><98><98>^^ø<9e>øx<86>^F<98>æ<9e><       86>ø<98>ø<9e><86><80><9e>^F^^<9e>`^^^^fø~^Fxàx^^æ^Føxà<98>æ><86>ø<98>ø^^x<9e>^F^^<9e>`^^^^føxà<98><80>^^^^à^^fxà<86>x<86>~f<9e>`<98>þxàx^^xø<98><86>~æx`^^<98><<80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx       ^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xx``àx^^à`<86>~f<9e>`<98><86><98>^^f^^~fx^F^^~f<9e>`<98><9e>^^f^^~f<86><98>^^^^<98><86><98>ø<9e>ø^^~<86>`x<9e>`xø<98><86><98>à<98><86><98><98>~føxx       þ^^f^^<9e>`^^xxþ^^x<86>~f<9e>`xàx^^æ<80><98><9e><80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xx``x~x`ø<9e><86><98>ø<9e>ø<9e><98><98>^^ø<9e>þ<86>æ<9e>~^^øx<86>       ^^<9e><86><98>ø<9e>ø<9e><98><98>^^ø<9e>þ<86>æ<9e>^F^^<9e>^F<9e>xf<98><86>^^<9e>à<9e>fxf^^^^f8~^Fx^^`x<9e>`x<86>~f<9e>`xàx^^xø<98><86><98>à<98><86><98><98>~fxæ<80><98><9e><80><9e>æ`<9e><9e>^^<9e       >æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xx``x<80>x`<9e><9e><80><9e><98><9e>øx<86>^^<9e><86><9e>`<9e><86>~<98><80>^^~^^<9e>`<9e>^^~<9e><86>x<98><86><98><86>xþ<86>f~f<9e>`~x`xæ^F       øxø<9e><86><9e>`^^x~^F^^~^^<9e>`<9e>^^~^^x<86>~f<9e>`<98><9e><9e>àx^^æææ<80><98><9e><80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xx``^^^F^^`~^F<9e>æ<9e><86><9       8>æ^^<9e><86>^^<9e><86><98>ø<9e>ø<9e><98><98>^^ø<9e>øx<86>^F<98>æ<9e><86>ø<98>ø<9e><86><80><9e>^F^^<9e>`^^^^fø~x`x^^æ^Føxà8æ<9e><86>ø<98>ø^^x<9e>^F^^<9e>`^^^^føxà<98><80>^^^^à^^fxà<86>x<86>~f<9       e>`<98>þxàx^^xø<98><86>~æxxæ<80><98><9e><80><9e>æ`<9e><9e>^^<9e>æ`xx<9e>xx^^`<9e><9e><9e>^^fææ<9e><80><9e>æ`<9e>^^x^^`^^xx``æ`xà`ø

三 解决方法

f = open("test,txt", "r") #默认utf-8读取文件
改成
f = open("test.txt", "rb") # 使用二进制读取文件

data = f.readline()
改成
data = f.readline()
data = data.decode('utf-8', 'ignore') #ignore"的作用就是有异常就越过

如上改法,可以跳过乱码部分

打开dat文件时出现乱码的原因可能是因为文件的编码格式不是utf-8。你可以尝试使用其他编码格式来打开文件,比如gbk或者unicode。你可以使用以下代码来指定编码格式打开文件: ```python with open('file.dat', 'r', encoding='gbk') as f: data = f.read() ``` 如果你想将dat文件转换成csv或Excel格式,你可以尝试将dat文件另存为csv文件,然后再使用Excel打开。你可以按照以下步骤进行操作: 1. 右键点击dat文件,选择以记事本的方式打开。 2. 在记事本中选择另存为,将编码方式设置为UTF-8,并将文件后缀改为.csv。 3. 使用Excel打开保存好的csv文件,你将会看到以表格形式显示的数据。 这样你就可以将dat文件转换成csv格式,并使用Excel打开了。\[2\]\[3\] #### 引用[.reference_title] - *1* [[python专题笔记]文件乱码](https://blog.youkuaiyun.com/weixin_41596275/article/details/124319812)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [csv格式转换成excel(CSV格式转换成dat文件出现乱码)](https://blog.youkuaiyun.com/yetaodiao/article/details/127366730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值