python - Unicode 字符串适用于 python2,但不适用于 python3

标签 python python-3.x unicode utf-8 python-unicode

我编写了一个程序,其中有一些 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/

相关文章:

Java 无法打开文件名中包含替代 Unicode 值的文件?

python - 波兰编码 - 分割问题

python - 即使 keras 中的精度为 1.00,categorical_crossentropy 也会返回较小的损失值

python - 某些字符的正则表达式冲突 (ISO-8859-1 Windows-1252)

Python 3D 多项式曲面拟合,顺序相关

python - 堆叠 RNN 的输入形状

python-3.x - 运行尝试微调 Wav2Wav 医学词汇模块的单元时出现混合精确 Cuda 错误

Python 嵌套字典替换为 none 并追加而不使用 get

windows - C/C++中的跨平台unicode : Which encoding to use?

python - Django shell 编码错误(仅限 Debian,Ubuntu 没问题)