迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 错误 UnicodeDecodeError: ASCII Codec Can't Decode Byte in Position: Ordinal Not in Range

作者:迹忆客 最近更新:2023/05/30 浏览次数:

在本文中,我们将学习如何解决在代码执行期间发生的 UnicodeDecodeError。 我们将查看导致此错误的不同原因。

我们还将找到在 Python 中解决此错误的方法。 让我们从 Python 中的 UnicodeDecodeError 开始。


Python 中的 Unicode 解码错误

如果您遇到反复出现的 UnicodeDecodeError 并且不确定它发生的原因或如何解决它,那么这篇文章适合您。

在本文中,我们将深入探讨出现此错误的原因以及解决该错误的简单方法。

Python中Unicode解码错误的原因

在 Python 中,当我们使用一种编解码器尝试解码甚至没有使用该编解码器编码的字节时,就会出现 UnicodeDecodeError。 更具体地说,让我们借助锁和钥匙的类比来理解这个问题。

假设我们创建了一把锁,只能使用专为该锁制作的唯一钥匙打开。

当您尝试使用不是为这把锁制作的钥匙打开这把锁时会发生什么? 它不适合。

让我们创建包含以下内容的文件 example.txt。

𝘈Ḇ𝖢𝕯٤ḞԍНǏ
hello world

让我们尝试使用以下代码使用 ascii 编解码器解码此文件。

示例 1:

with open('example.txt', 'r', encoding='ascii') as f:
    lines = f.readlines()
    print(lines)

代码的输出:

Traceback (most recent call last):
  File "/home/jiyik/PycharmProjects/examples/main.py", line 2, in <module>
    lines = f.readlines()
  File "/usr/lib/python3.10/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 0: ordinal not in range(128)

让我们看另一个更直接的示例,说明当您使用一种编解码器对字符串进行编码并使用不同的编解码器进行解码时会发生什么。

示例 2:

string = '𝘈Ḇ𝖢𝕯٤ḞԍНǏ'
encoded_string = string.encode('utf-8')
decoded_string = encoded_string.decode('ascii')
print(decoded_string)

在这个例子中,我们有一个使用 utf-8 编解码器编码的字符串,在下一行中,我们尝试使用 ascii 编解码器解码这个字符串。

代码的输出:

Traceback (most recent call last):
  File "/home/jiyik/PycharmProjects/examples/main.py", line 4, in <module>
    decoded_string = encoded_string.decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 0: ordinal not in range(128)

发生这种情况是因为示例 1 中的文件内容和示例 2 中的字符串未使用 ascii 编解码器编码,但我们尝试使用它解码这些脚本。 这会导致 UnicodeDecodeError


Python中Unicode解码错误如何解决

解决这个问题相当简单。 如果我们研究 Python 的文档,我们将看到几个可用于帮助您解码字节的标准编解码器。

因此,如果我们将上面示例代码中的 ascii 替换为 utf-8 编解码器,它将成功解码 example.txt 中的字节。

示例代码:

with open('example.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    print(lines)

代码的输出:

['𝘈Ḇ𝖢𝕯٤ḞԍНǏ\n', 'hello world']

至于第二个例子,你只需要做同样的事情。

示例代码:

string = '𝘈Ḇ𝖢𝕯٤ḞԍНǏ'
encoded_string = string.encode('utf-8')
decoded_string = encoded_string.decode('utf-8')
print(decoded_string)

代码的输出:

𝘈Ḇ𝖢𝕯٤ḞԍНǏ

值得一提的是,有时使用一种编解码器可能无法完全解码字符串。

因此,如果需要,您可以通过简单地添加 ignore 参数来开发您的程序以忽略它无法解码的任何字符,如下所示:

with open('example.txt', 'r', encoding='utf-8', errors='ignore') as f:
    lines = f.readlines()
    print(lines)

虽然这将跳过编译器在解码某些字符时遇到的任何错误,但重要的是要提到这可能会导致数据丢失。

我们希望您发现本文有助于理解如何解决 Python 中的 UnicodeDecodeError

上一篇:Python 错误 NameError: Name Execfile Is Not Defined

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 错误 ImportError: No Module Named Requests

发布时间:2023/05/31 浏览次数:104 分类:Python

错误 ImportError: No module named requests 意味着 Python 解释器无法导入 requests 模块。本篇文章展示了修复Python中 ImportError: No module named requests 错误的方法。

Python 中 Locale.Error: Unsupported Locale Setting 错误

发布时间:2023/05/31 浏览次数:100 分类:Python

在本文中,我们将了解什么是区域设置模块和区域设置错误不受支持的本地设置,以及如何修复区域设置错误。locale.Error: unsupported locale setting 当您不熟悉此模块时会遇到。

Python 中错误 ImportError: No Module Named Sklearn

发布时间:2023/05/31 浏览次数:194 分类:Python

在 Python 中,sklearn 被用作机器学习工具,用于在回归、集群等方面创建程序。很多时候,导入它会抛出错误—— No module named sklearn。Python中错误ImportError: No module named sklearn的原因

修复 Python 中的 TypeError: Can Only Join an Iterable 错误

发布时间:2023/05/30 浏览次数:172 分类:Python

本篇文章将讨论Python中的 TypeError: can only join an iterable 错误。修复Python中 TypeError: can only join an iterable 错误。由于它是 TypeError,我们可以得出结论,正在对给定对象执行不受支持的操作。

修复 Python 错误 SyntaxError: Invalid Token

发布时间:2023/05/30 浏览次数:85 分类:Python

在本文中,我们将了解什么是 SyntaxError: invalid token Python 错误以及如何修复它。 令牌是语句的重要组成部分,组合这些令牌可为 Python 编译器提供有意义的模式。

修复 Python 错误 SyntaxError: 'break' Outside Loop

发布时间:2023/05/30 浏览次数:93 分类:Python

本篇文章将讨论 Python 的 SyntaxError: 'break' outside loop 错误。循环和条件语句是任何编程语言不可或缺的一部分。修复 Python 中的 SyntaxError: 'break' outside loop 错误

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便