UnicodeDecodeError:‘utf-8‘codec can‘t decode byte 0xc4 in position 0: invalid continuation byte

在Python编程中,遇到读取.txt或.csv文件时的UnicodeDecodeError,通常是由于文件编码与程序设定不符。解决方法包括:检查并修改文件编码,使用`chardet`库检测文件原始编码,或编写函数批量转换文件编码。确保在open()函数中正确指定文件的编码方式。

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

问题描述

Python 编程读取 .txt.csv 等文本文件时信息,遇到错误如下

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte

执行的代码是

filename = 'cdtest.txt'
    with open(filename, 'r', encoding='UTF-8') as fr:
        tempContent = fr.read()

原因分析

文本中出现了程序不能识别的字符,大概率是由于文本编码方式与程序设定的编码不一致。例如文件的编码方式是 GBK ,而程序中 open() 函数的 encoding 参数设置成了其他的。

解决办法

  1. 直接修改文本编码方式

    最直接的方式,可以直接用记事本打开文档,保存(或另存为)新文本,在保存选项中设置编码格式为 UTF-8 ,这是较常用的编码方式。

  2. 以文本编码格式读入

    修改代码如下。如改为 GBK ,但前提是要知道本文是哪种编码。

    filename = 'cdtest.txt'
    with open(filename, 'r', encoding='GBK') as fr:
        tempContent = fr.read()
    

    如何得知文件编码方式?

    import chardet
    def  GetEncodingSheme(_filename):
        with open(_filename, 'rb') as file:
            buf = file.read()
        result = chardet.detect(buf)
        return result['encoding']
        
    if __name__ == '__main__':
    	filename = 'cdtestu.txt'
    	print(GetEncodingSheme(filename))
    
  3. 程序修改文本编码方式

    首先要知道文本的编码方式 (上2),然后修改它,存成新文本。

    def ChangeEncoding(_infilename, _outfilname, _encodingsheme='UTF-8'):
    	ifEncodeSheme = GetEncodingSheme(_infilename)
    	with open(_infilename, 'r', encoding=ifEncodeSheme) as fr:
        	tempContent = fr.read()
    	with open(_outfilname, 'w', encoding=_encodingsheme) as fw:
        	fw.write(tempContent)
    if __name__ == '__main__':
    	ChangeEncoding('ascii.txt', 'ascii2.txt', 'GB2312')
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值