我正在研究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。
答案 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