了解Python中的编码和解码

时间:2017-07-19 20:31:40

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

我正在研究python 2.7中的编码方式,我无法理解它的某些方面。我使用过不同编码的文件,但到目前为止我做得还不错。在我开始使用某些API之前,它需要使用Unicode字符串

  

u'text'

我正在使用普通字符串

  

'文本'

这解决了很多问题。

所以我想知道如何从 Unicode String 转到 Normal 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。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

因此,如果您想从普通字符串转到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