面对 UnicodeDecodeError: 'ascii' 编解码器无法在 Python 2.x 中解码字节表示尝试将包含非 ASCII 字符的 Python 2.x str 转换为 Unicode 字符串,而不指定原始编码string.
Unicode 字符串与字符串不同,它保存 Unicode 点代码,并且可以表示整个范围内的任何 Unicode 点。另一方面,字符串包含编码文本,例如 UTF-8、UTF-16 或 ISO-8895-1。字符串被解码为 Unicode,反之亦然。文件和文本数据始终以编码字符串形式传输。
Markdown 模块使用 unicode() 来验证传入的字符串,确保它们是 ASCII 或重新包装的 Unicode 字符串。由于 Markdown 作者无法确定传入字符串的编码,因此他们依赖用户在传递字符串之前将其解码为 Unicode。
可以在代码中使用 'u' 前缀在代码中声明 Unicode 字符串。细绳。例如:
即使没有显式的 unicode() 调用,也可能发生从 str 到 Unicode 的转换。以下情况会触发 UnicodeDecodeError 异常:
来源代码: 使用带有“u”前缀的 Unicode 字符串可以将非 ASCII 字符包含在源代码中。为了使Python能够正确解码源代码,必须包含正确的编码标头。对于 UTF-8 文件,请使用:
文件: 使用 io.open 和正确的编码来动态解码文件。例如,对于 UTF-8 文件:
数据库: 配置数据库以返回 Unicode 字符串并使用 Unicode 字符串进行 SQL 查询。
HTTP: 网页可以有不同的编码。 Python-Requests 在response.text中返回Unicode。
手动:使用 my_string.decode(encoding) 手动解码字符串,其中encoding是适当的编码。
Python 3 处理 Unicode 的方式与 Python 2.x 略有不同。常规的 str 现在是 Unicode 字符串,旧的 str 现在是字节。
在 Python 3 中,默认编码是 UTF-8,因此在不指定编码的情况下解码字节字符串使用 UTF-8。此外,open() 默认在文本模式下运行,返回解码后的 str(Unicode 字符串)。
以上是如何解决 Python 2.x 中的 UnicodeDecodeError: 'ascii' 编解码器无法解码字节?的详细内容。更多信息请关注PHP中文网其他相关文章!