UnicodeDecodeError: 'ascii' 编解码器无法解码字节 当您尝试将包含非 ASCII 字符的 Python 2.x str 转换为 Unicode 字符串而不指定原始字符串的编码时,通常会发生。
Unicode 字符串(也称为 unicode)是 Python 中的一种单独的字符串类型,它保存 Unicode 点代码,并且可以表示整个范围内的任何 Unicode 点。相比之下,字符串包含各种格式的编码文本(例如 UTF-8、UTF-16、ISO-8895-1)。
Markdown 模块开发人员可能使用 unicode() 作为质量门来确保传入字符串是 Unicode。由于它们无法确定传入字符串的编码,因此您必须在将其传递到 Markdown 之前对其进行解码。
可以在代码中使用“u”前缀声明 Unicode 字符串:
my_u = u'my ünicôdé strįng' print(type(my_u)) # <type 'unicode'>
Unicode 字符串也可以来自文件、数据库或网络模块,您无需指定
即使没有显式 unicode() 调用,Unicode 转换也会发生:
# Explicit conversion without encoding unicode('€') # New-style format string into Unicode string # Python attempts to convert value string to Unicode first u"The currency is: {}".format('€') # Old-style format string into Unicode string # Python attempts to convert value string to Unicode first u'The currency is: %s' % '€' # Append string to Unicode # Python attempts to convert string to Unicode first u'The currency is: ' + '€'
在下图中,“café根据终端类型,“UTF-8”和“Cp1252”的编码方式不同。在这两种情况下,“caf”均以纯 ASCII 编码。 UTF-8 使用两个字节来表示“é”,而 Cp1252 使用一个字节,该字节也恰好与 Unicode 点值匹配。在这种情况下,使用正确的编码调用decode(),并成功转换为Unicode:
[使用正确的编码成功进行Unicode转换的图表]
但是,如果decode () 用“ascii”调用,这类似于调用 unicode() 而不指定编码,会出现 UnicodeDecodeError发生:
[编码错误的 Unicode 转换不成功的图表]
最佳实践是在代码中创建“Unicode 三明治”,您可以在其中:
这种方法使您不必担心整个过程中的字符串编码问题。 code.
对于文件,请使用 io 模块的 TextWrapper 和适当的编码:
my_u = u'my ünicôdé strįng' print(type(my_u)) # <type 'unicode'>
以上是如何解决Python的'UnicodeDecodeError:'ascii'编解码器无法解码字节”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!