Python 2: Comparing a unicode and a str



这个话题已经在StackOverflow上,但我没有找到任何令人满意的解决方案:

我有一些来自服务器的Unicode字符串,我有一些硬编码的字符串在我想要匹配的代码。我确实理解为什么我不能只是做一个==,但我没有成功地转换它们正确(我不在乎我是否要做str -> unicode或unicode -> str)。

我尝试了encodedecode,但没有给出任何结果。

这是我收到的…

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

(如你所见,它是德语!)

如何在Python中使它们相等2

首先确保在文件的顶部声明了Python源文件的编码。如。如果文件被编码为latin-1:

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

第二,始终将文本存储为Unicode字符串:

fromCode = u'Führerschein nötig'

如果您从某处获得字节,请在处理文本之前使用str.decode将它们转换为Unicode。对于文本文件,在打开文件时指定编码,例如:

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

将字节字符串与Unicode字符串进行比较的代码通常会随机失败,这取决于系统设置,或者碰巧用于文本文件的任何编码。不要依赖它,始终确保比较两个unicode字符串或两个字节字符串。

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

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....

最新更新