Python 2:比较 unicode 和 str
Python 2: Comparing a unicode and a str
这个主题已经在 Whosebug 上了,但我没有找到任何令人满意的解决方案:
我有一些来自服务器的 Unicode 字符串,我在代码中有一些我想要匹配的硬编码字符串。而且我明白为什么我不能只做一个 ==
但我没有成功地正确转换它们(我不在乎我是否必须做 str -> unicode 或 unicode -> str)。
我尝试了 encode
和 decode
但没有给出任何结果。
这是我收到的...
fromServer = {unicode} u'Führerschein nötig'
fromCode = {str} 'Führerschein nötig'
(如你所见,是德语!)
如何让它们在 Python 2 中相等?
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....
首先确保在文件顶部声明 Python 源文件的编码。例如。如果您的文件编码为 latin-1:
# -*- coding: latin-1 -*-
其次,始终将文本存储为 Unicode 字符串:
fromCode = u'Führerschein nötig'
如果您从某处获取字节,请在处理文本之前使用 str.decode
将它们转换为 Unicode。对于文本文件,打开文件时指定编码,eg:
# use codecs.open to open a text file
f = codecs.open('unicode.rst', encoding='utf-8')
将字节字符串与 Unicode 字符串进行比较的代码通常会随机失败,具体取决于系统设置或文本文件使用的任何编码。不要依赖它,始终确保比较两个 unicode 字符串或两个字节字符串。
Python 3 改变了这个行为,它不会尝试转换任何字符串。 'a'
和 b'a'
被认为是不同类型的对象,比较它们总是 return False
.
这个主题已经在 Whosebug 上了,但我没有找到任何令人满意的解决方案:
我有一些来自服务器的 Unicode 字符串,我在代码中有一些我想要匹配的硬编码字符串。而且我明白为什么我不能只做一个 ==
但我没有成功地正确转换它们(我不在乎我是否必须做 str -> unicode 或 unicode -> str)。
我尝试了 encode
和 decode
但没有给出任何结果。
这是我收到的...
fromServer = {unicode} u'Führerschein nötig'
fromCode = {str} 'Führerschein nötig'
(如你所见,是德语!)
如何让它们在 Python 2 中相等?
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....
首先确保在文件顶部声明 Python 源文件的编码。例如。如果您的文件编码为 latin-1:
# -*- coding: latin-1 -*-
其次,始终将文本存储为 Unicode 字符串:
fromCode = u'Führerschein nötig'
如果您从某处获取字节,请在处理文本之前使用 str.decode
将它们转换为 Unicode。对于文本文件,打开文件时指定编码,eg:
# use codecs.open to open a text file
f = codecs.open('unicode.rst', encoding='utf-8')
将字节字符串与 Unicode 字符串进行比较的代码通常会随机失败,具体取决于系统设置或文本文件使用的任何编码。不要依赖它,始终确保比较两个 unicode 字符串或两个字节字符串。
Python 3 改变了这个行为,它不会尝试转换任何字符串。 'a'
和 b'a'
被认为是不同类型的对象,比较它们总是 return False
.