当前位置:   article > 正文

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

unicodedecodeerror: 'utf-8' codec can't decode byte 0xc4 in position 0: inva

问题描述

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

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

执行的代码是

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

原因分析

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

解决办法

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

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

  2. 以文本编码格式读入

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

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

    如何得知文件编码方式?

    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/433158
推荐阅读
相关标签
  

闽ICP备14008679号