我编写了一个程序,其中有一些 Unicode 标签,但出现了奇怪的问题。 Unicode 字符串在 python2 上工作正常,但在 python3 上工作得不好,它在我的另一台计算机上的 python3 上工作,顺便说一句,但在现场服务器不工作。真奇怪。请帮忙。
我在另一台运行 python3 的 PC 上以及在实时服务器上的 python2 上尝试了相同的代码。它可以工作,但是当我在同一个实时服务器上的 python3 上运行相同的代码时,我收到错误。
>>> pt = 'Casa e Decoração'
错误:
File "<stdin>", line 0
^
SyntaxError: 'utf-8' codec can't decode byte 0xe7 in position 19: invalid continuation byte
>>>
最佳答案
我怀疑您在复制这些数据时,它是作为原始 latin-1 (或相关的每个字符一个字节 ASCII 超集编码)复制的。在 Python 2 上,latin-1 is the default unicode
literal encoding ,但在 Python 3 上,他们切换到 UTF-8(可以指定替代编码)。
如果您的工具使用 latin-1 作为源文件字节,那么您会看到此问题。最简单的解决方案是用等效的纯 ASCII 转义符替换文字字符,然后 Python 可以在解析时对其进行解码。例如,
>>> pt = 'Casa e Decora\xe7\xe3o'
具有相同的含义,不会被误解。
或者,您可能可以按原样保留 latin-1 代码,然后输入:
# -*- coding: latin-1 -*-
作为源文件的第一行或第二行(它必须那么早;在第三行及之后它会被忽略),因此 Python 知道将剩余字节解释为 latin-1,而不是默认 utf-8。
关于python - Unicode 字符串适用于 python2,但不适用于 python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57532927/