解决:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x81 in position 18: illegal multibyte sequence

本文讲述了如何处理Python编程中遇到的关于Excel二进制数据和UTF-8编码不匹配导致的UnicodeDecodeError,重点在于理解如何正确处理二进制文件和字符编码设置。

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

意思就是:UnicodeDecodeError:'gbk'编解码器无法解码位置18中的字节0x81:非法的多字节序列。

这是我使用python发送邮件的时候出现的报错信息

我编码格式使用的是utf-8并不是gbk ,但是却无法解码

于是我回头看之前的代码

由于excel表格是二进制数据,所以open函数还需要加上‘rb’.

 

这样就好了。 

### 解释 `UnicodeDecodeError` 错误 你在处理文件或字符串时遇到了 `UnicodeDecodeError` 错误,具体信息是 `'gbk' codec can't decode byte 0x81 in position 105: illegal multibyte sequence`。 这个错误的原因是在尝试将字节数据解码为文本的过程中,Python 使用了 GBK 编码来进行解码操作。GBK 是一种常见的中文字符编码标准,但它无法识别某些特定的字节序列(如这里的 `0x81`),导致了解码失败并抛出了异常。 #### 可能的原因: 1. **文件的实际编码不是 GBK**:可能是 UTF-8 或其他编码格式,而你却指定了 GBK 进行读取。 2. **文件中含有非预期的二进制数据**:如果文件中有不可打印的控制字符或其他非法字节组合,则可能会引发此问题。 3. **损坏的数据流**:例如在网络传输过程中出现了丢包等情况也可能造成类似的问题。 #### 解决方案建议: 你可以通过以下几种方法之一来解决这个问题: ##### 尝试自动检测编码 ```python import chardet with open('your_file.txt', 'rb') as file: raw_data = file.read() detected_encoding_info = chardet.detect(raw_data) print(f"Detected encoding is {detected_encoding_info}") # 根据检测到的结果调整下面一行的内容 corrected_text = raw_data.decode(detected_encoding_info['encoding'], errors='ignore') ``` 这里我们利用了一个名为 [chardet](https://pypi.org/project/chardet/) 的库来自动生成文件的最佳猜测编码,并据此进行正确的解码工作;同时设置了 `errors='ignore'` 参数使得遇到无法解析的部分不会报错而是直接跳过该部分。 ##### 指定正确的编码 如果你已经确定了源文件的确切编码形式,请显式地指定它而不是依赖默认值。对于大多数现代文档来说,默认情况下应当选择 UTF-8 而非 GBK: ```python try: with open("path/to/file", "r", encoding="utf-8") as f: content = f.read() except UnicodeDecodeError: print("Failed to read the file using utf-8.") else: # process your data here... ``` ##### 更改输入输出模式 有时只需改变打开文件的方式就能解决问题,比如从 `'r'`(只读) 改成 `'rt'`(带缓冲区的纯文本读写),这取决于具体的上下文环境和个人需求。 最后提醒一下,在处理含有多种语言混合内容的情况下(特别是包含西方文字的情况),UTF-8 几乎总是最好的选择因为它能够兼容几乎所有的常用字符集并且不容易出错。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值