📌  相关文章
📜  UnicodeDecodeError:“charmap”编解码器无法解码位置 92 中的字节 0x81:字符映射到<undefined>(1)

📅  最后修改于: 2023-12-03 15:20:50.960000             🧑  作者: Mango

UnicodeDecodeError解码异常介绍

UnicodeDecodeError是Python中的一个编码异常类型,通常出现在文本字符串的解码过程中。本篇文章将介绍UnicodeDecodeError异常及其常见原因、如何定位问题以及避免方法。

错误信息

常见的UnicodeDecodeError错误信息如下:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 92: character maps to <undefined>

错误信息分成两部分:

  • UnicodeDecodeError - 异常类型
  • 'charmap' codec can't decode byte 0x81 in position 92: character maps to <undefined> - 异常详细信息,表示该字符无映射关系
常见原因

出现UnicodeDecodeError异常的原因通常是因为文本字符串的编码方式与解码方式不一致。常见的原因如下:

  1. 源文件编码和文本编码不一致。
  2. 文本文件编码和解码方式不一致。
  3. 字符串编码和解码方式不一致。
定位问题
  1. 源文件编码和文本编码不一致。

在Python3中默认的文件编码是UTF-8,如果我们在代码中使用了其他编码方式,就会出现编码方式不一致的问题。解决方法是在打开文件时加入相应的编码方式。

with open('file.txt', 'r', encoding='gbk') as f:
    content = f.read()
  1. 文本文件编码和解码方式不一致。

如果从其他地方获取文本数据(如爬虫、读取其他来源的文件),则需要确认数据的编码方式,并使用相应的编码方式进行解码。

content = response.content.decode('gbk')
  1. 字符串编码和解码方式不一致。

如果字符串编码不一致,会导致解码失败。此时需要使用相应的编码方式进行解码。

b = bytes('你好', encoding='gbk')
s = b.decode('utf-8')
避免方法
  1. 使用Python3默认的UTF-8编码方式。
  2. 统一使用同一种编码方式。
  3. 在打开文件时指定正确的编码方式。
结论

UnicodeDecodeError异常通常出现在文本字符串的解码过程中,出现原因是编码方式不一致。定位问题的方法是确定是哪种编码方式出现了问题,使用正确的编码方式进行解码即可避免。避免方法是统一使用同一种编码方式,在打开文件时指定正确的编码方式。