错误消息会告诉您究竟出了什么问题。Python 解释器需要知道非 ASCII 字符的编码。
如果你想返回U+00A3那么你可以说
return u'\u00a3'
它通过 Unicode 转义序列以纯 ASCII 表示此字符。如果要返回包含文字字节 0xA3 的字节字符串,那就是
return b'\xa3'
(在 Python 2 中b
是隐式的;但显式优于隐式)。
错误消息中链接的 PEP 会准确地告诉您如何告诉 Python“此文件不是纯 ASCII;这是我正在使用的编码”。如果编码是 UTF-8,那就是
# coding=utf-8
或 Emacs 兼容的
# -*- encoding: utf-8 -*-
如果您不知道您的编辑器使用哪种编码来保存此文件,请使用十六进制编辑器和一些谷歌搜索来检查它。Stack Overflow字符编码标签有一个标签信息页面,其中包含更多信息和一些故障排除提示。
总而言之,在 7 位 ASCII 范围 (0x00-0x7F) 之外,Python 不能也不能猜测字节序列代表什么字符串。https://tripleee.github.io/8bit#a3显示了字节 0xA3 的 21 种可能解释,这仅来自传统的 8 位编码;但它也很可能是多字节编码的第一个字节。但事实上,我猜你实际上是在使用 Latin-1,所以你应该有
# coding: latin-1
作为源文件的第一行或第二行。无论如何,如果不知道字节应该代表哪个字符,人类也无法猜测到这一点。
警告:coding: latin-1
肯定会删除错误消息(因为在此编码中没有技术上不允许的字节序列),但如果实际编码是其他编码,则在解释代码时可能会产生完全错误的结果。声明编码时,您确实必须完全确定地知道文件的编码。