2015-10-19 94 views
0

这个话题已经在计算器上,但我没有找到任何令人满意的解决方案:的Python 2:比较一个Unicode和STR

我必须以Unicode字符串一些来自服务器和我在一些硬编码字符串代码,我想匹配。而且我也明白为什么我不能只制作一个==,但我没有成功地将它们转换成正确的(我不关心我是否要做str - > unicode或unicode - > str)。

我试过encodedecode但它没有给出任何结果。

这是我收到...

fromServer = {unicode} u'Führerschein nötig' 
fromCode = {str} 'Führerschein nötig' 

(你可以看到,它是德国!)

如何可以让他们在Python 等于?

+3

为什么不在unicode中对代码进行硬编码? 'fromCode =u'Führerscheinnötig''而不是'fromCode ='Führerscheinnötig''? – colidyre

+0

哈哈哈,是啊当然,这不是坏的,是一个解决方案,当然....:DD –

回答

-1
tested on 2.7 

for German umlauts latin-1 is used. 

if 'Führerschein nötig'.decode('latin-1') == u'Führerschein nötig': 
    print('yes....') 

yes.... 
+1

是,我得到'本地=标准[“关键”]编码(“UTF-8”) 的UnicodeDecodeError:“ASCII '编解码器不能在14位解码字节0xc3:在范围序数不(128)' –

+0

@LaurentMeyer尝试比较 'Führerscheinnötig'.decode(' 的Latin-1')和u'Führerscheinnötig” – LetzerWille

+0

为什么它工作时downvote并解决OP问题? – LetzerWille

2

首先确保您在文件顶部声明了Python源文件的编码。例如。如果您的文件编码为拉丁文1:

# -*- coding: latin-1 -*- 

第二,总存储文本为Unicode字符串:

fromCode = u'Führerschein nötig' 

如果你从某个字节,将它们转换与str.decode为Unicode与工作前,文本。对于文本文件,打开文件时指定编码,例如:该字节串用Unicode字符串比较会失败随机的,根据系统设置,或任何编码恰好是用于文本

# use codecs.open to open a text file 
f = codecs.open('unicode.rst', encoding='utf-8') 

代码文件。不要依赖它,总是要确保比较两个unicode字符串或两个字节字符串。

Python 3改变了这种行为,它不会尝试转换任何字符串。 'a'b'a'被视为不同类型的对象,并将它们进行比较将始终返回False

+0

我稍后再测试,谢谢! –