此问题在此处已有答案:
"SyntaxError: Non-ASCII character ..." or "SyntaxError: Non-UTF-8 code starting with ..." trying to use non-ASCII text in a Python script(7个答案)
四年前关闭了。
我一直得到一个错误,我不知道如何修复它。
代码行:
if not len(lines) or lines[-1] == '' or lines[-1] == '▁':
lines = list(filter(lambda line: False if line == '' or line == '▁' else True, list(lines)))
输出:语法错误:文件prepare_data.py中第512行的非ASCII字符'\xe2',但未声明编码;详情请参见http://python.org/dev/peps/pep-0263/
2条答案
按热度按时间1dkrff031#
错误信息告诉你到底哪里出了问题。Python解释器需要知道字符串中字节的编码,字符串显示为一个时髦的下划线。
如果你想匹配U+2581,你可以说
它通过Unicode转义序列在纯ASCII中表示这个字符。如果你想匹配一个常规的ASCII下划线,那就是ASCII 95 /U+005F;这里是两个字符并排,便于比较和可能的复制/粘贴:
错误消息中链接的PEP * 确切地 * 指导您如何告诉Python“这个文件不是纯ASCII;这是我使用的编码”。如果编码是UTF-8,则为
还是兼容Emacs的
如果你不知道你的编辑器使用哪种编码来保存这个文件,可以用十六进制编辑器和一些谷歌搜索来检查它。堆栈溢出character-encoding标签有一个tag info page,其中包含更多信息和一些故障排除提示。
换句话说,在7位ASCII范围(0x 00 - 0x 7 F)之外,Python不能也不应该猜测字节序列表示的字符串。https://tripleee.github.io/8bit#e2显示了字节0xE 2的21种可能的解释,这只是来自传统的8位编码;实际上,我猜您实际上使用的是UTF-8,它将这个字符表示为三个字节0xE 2 0x 96 0x 81;但是如果没有看到呈现为类似下划线的字符,人类也绝对没有办法猜到这一点。
djp7away2#
试试这个。我还没有测试过它,但我认为它可能会解决你的编码问题。你的代码需要一些可读性的改进,请记住Python的禅宗。