如何在Python中比较unicode和string?

2024-10-03 11:13:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个变量(假设xy)具有以下值:

x = u'Ko\u0161ick\xfd'
y = 'Ko\x9aick\xfd'

它们可以用不同的方式编码相同的名称。第一个变量是unicode,第二个变量是字符串。在

有没有一种方法可以将字符串转换成unicode(或unicode转换成string)并检查它们是否真的相同。在

我尝试使用encode

^{pr2}$

它返回新的内容(第三个版本):

'Ko\xc5\xa1ick\xc3\xbd'

并使用以下方法:

print x.encode('utf-8')

返回另一个版本:

KošickÛ

所以,我完全糊涂了。有没有办法让所有的东西都保持相同的格式?在


Tags: 方法字符串版本名称内容编码string方式
3条回答

可以将字节字符串转换为Unicode,但如果它包含任何非ASCII字符,则必须指定编码。在

if y.decode('iso-8859-1') == x:
    print(u'{0!r} converted to Unicode == {1}".format(y, x))

对于给定的示例,这是不正确的;但可能y使用了不同的编码。在

从理论上讲,您可以采用任何一种方式进行转换,但通常情况下,在内部使用所有Unicode,并将其他编码转换为Unicode以便在您的代码中使用(而不是相反)。在

你需要知道字节串的编码。它看起来像windows-1252

x = u'Ko\u0161ick\xfd'
y = 'Ko\x9aick\xfd'

print x == y.decode('windows-1252')
print x.encode('windows-1252') == y

输出:

^{pr2}$

最佳实践是在输入到程序时将文本转换为Unicode,用Unicode进行所有处理,并将其转换回编码字节以持久存储,在套接字上传输等

好吧,utf-8现在是交换和Linux世界中事实上的标准,但是还有很多其他编码。在

常见的例子有latin1、latin9(与欧元符号相同)和cp1252(它们的windows变体)。在

在您的情况下:

>>> x.encode('cp1252')
'Ko\x9aick\xfd'

因此y字符串似乎是cp1252编码的。在

相关问题 更多 >