【问题标题】:Unicode string is working on python2 but not in python3Unicode 字符串适用于 python2,但不适用于 python3
【发布时间】:2019-12-23 06:25:36
【问题描述】:

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

【问题讨论】:

  • 这个“实时服务器”是什么?
  • ubuntu version# 19 .. 但它在我的另一台电脑 ubuntu18 上工作正常
  • 它应该像本页stackoverflow.com/questions/30539882/… btw 上所说的那样工作,它适用于 Windows,我需要它在 ubuntu 上同样工作。
  • 请问有哪位大神可以帮忙吗??这是一个奇怪的问题,简单的变量赋值出现错误..

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


【解决方案1】:

作为@ShadowRanger 关于文件编码的答案的补充。

Linux 上有一个转换实用程序。例如,假设您的文件是用葡萄牙语编写的,它可能使用代码页 860。在命令行上(即 Linux shell,而不是 Python 代码):

iconv -f CP860 -t UTF8 inputfile.py > outputfile.py

如果没有帮助,请在转换前尝试自动检测编码。链接:https://superuser.com/q/301552

【讨论】:

  • 文件是 utf-8 编码,问题是它读取的 unicode 值是这样的 * Filmes e séries *
【解决方案2】:

我怀疑,无论您是在复制这些数据,它是作为原始 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 默认值。

【讨论】:

  • 实际上我正在使用 selenium 从站点获取数据,该站点使用其他语言,相同的代码在我的其他 pc python3 和同一实时服务器 python2 上运行良好,但在实时服务器上的 python3 上却没有。 . 它仍然无法正常工作我尝试设置 latin-1 编码。目前没有成功
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2023-01-11
  • 2017-01-06
  • 2017-03-25
  • 1970-01-01
  • 2012-08-20
相关资源
最近更新 更多