了解Python中的编码和解码

我正在寻找如何工作在python 2.7编码,我不能完全理解它的一些方面。 我已经使用不同编码的文件,但到目前为止,我还是没有问题。 直到我开始使用某些API ,并且需要使用Unicodestring

u'text”

我正在使用正常string

'文本'

其中提出了很多问题。

所以我想知道如何从Unicodestring正常string ,因为我正在处理的数据是由正常string处理的,我只知道如何获得Unicode string ,而不会出现问题,通过Python Shell 。

我试过的是:

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

现在,要得到一个Unicodestring,我所做的是:

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

但是这对我不起作用,因为我在我的代码中做了一些比较:

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

即使原始值是相同的,由于编码而失败。

[编辑]

我在Windows 10上使用Python Shell。

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

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

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

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

你的结果可能会有所不同!

所以如果你想从正常的字符串到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