【问题标题】:Understanding encoding and decoding in Python了解 Python 中的编码和解码
【发布时间】:2017-12-25 07:26:50
【问题描述】:

我正在研究 python 2.7 中的编码是如何工作的,但我不太了解它的某些方面。我处理过具有不同编码的文件,但到目前为止我做得还不错。直到我开始使用某些 API,它需要使用 Unicode 字符串

你'文本'

我使用的是普通字符串

'文本'

这引发了很多问题。

所以我想知道如何从 Unicode StringNormal String 并向后,因为我正在使用的数据是由 Normal 处理的字符串,我只知道如何通过 Python Shell 获取 Unicode 字符串而不会出现问题。

我试过的是:

>>> foo = "gurú"
>>> bar = u"gurú"
>>> foo
'gur\xa3'
>>> bar
u'gur\xfa'

现在,要获取 Unicode 字符串,我要做的是:

>>> foobar = unicode(foo, "latin1")
u'gur\xa3'

但这对我不起作用,因为我在我的代码中进行了一些比较,如下所示:

>>> foobar in u"Foo gurú Bar"
False

由于编码的原因,即使原始值相同,也会失败。

[编辑]

我在 Windows 10 上使用 Python Shell。

【问题讨论】:

  • 这是因为你使用了错误的编码,latin1 不正确。如果您使用的是 Windows,您应该尝试mbcs,因为它使用了适合您的 Windows 风格的本机编码。
  • @MarkRansom 你是对的,确实我没有使用正确的编码,不幸的是我mbcs,不是要走的路。但是我在 stackoverflow 的另一个问题中找到了正确的答案,因此我将其添加为 asnwer 并链接到它,以供进一步提问。
  • mbcs 唯一不起作用的情况是,如果您在命令窗口中,我应该想到这一点。很高兴您能找到答案。

标签: windows python-2.7 unicode character-encoding console


【解决方案1】:

Windows 终端使用 DOS 的旧代码页。对于美国 Windows,它是:

>>> import sys
>>> sys.stdout.encoding
'cp437'

Windows 应用程序使用 Windows 代码页。 Python 的 IDLE 会显示 windows 编码:

>>> import sys
>>> sys.stdout.encoding
'cp1252'

您的结果可能会有所不同!...Source

因此,如果您想从普通 String 转到 Unicode 并向后。然后首先你必须找出你的系统的编码,它用于 Python 2.X 中的普通字符串。稍后,使用它进行正确的转换。

我给你举个例子:

>>> import sys
>>> sys.stdout.encoding
'cp850'
>>>
>>> foo = "gurú"
>>> bar = u"gurú"
>>> foo
'gur\xa3'
>>> bar
u'gur\xfa'
>>>
>>> foobar = unicode(foo, 'cp850')
u'gur\xfa'
>>>
>>> foobar in u"Foo gurú Bar"
True

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2016-03-17
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多