我有两个变量(比如x
和y
),它们具有以下值:
x = u'Ko\u0161ick\xfd'
y = 'Ko\x9aick\xfd'
它们可以使用不同的方式编码相同的名称。第一个变量是unicode,第二个变量是字符串。
有没有办法将字符串转换为unicode(或unicode转换为字符串)并检查它们是否真的相同。
我尝试使用encode
x.encode('utf-8')
返回新内容(第三个版本):
'Ko\xc5\xa1ick\xc3\xbd'
使用以下内容:
print x.encode('utf-8')
返回另一个版本:
KošickÛ
所以,我完全糊涂了。有没有办法让所有东西保持相同的格式?
答案 0 :(得分:2)
您可以将字节字符串转换为Unicode,但如果它包含任何非ASCII字符,则必须指定编码。
if y.decode('iso-8859-1') == x:
print(u'{0!r} converted to Unicode == {1}".format(y, x))
用你给出的例子,这不是真的;但也许y
的编码不同。
理论上,你可以转换任何一种方式,但一般来说,在内部使用全Unicode是有意义的,并将其他编码转换为Unicode以便在你的代码中使用(而不是相反)。
答案 1 :(得分:1)
您需要知道字节字符串的编码。它看起来像windows-1252
:
x = u'Ko\u0161ick\xfd'
y = 'Ko\x9aick\xfd'
print x == y.decode('windows-1252')
print x.encode('windows-1252') == y
输出:
True
True
最佳做法是在输入到程序时将文本转换为Unicode,以Unicode进行所有处理,然后转换回编码字节以持久存储,在套接字上传输等。
答案 2 :(得分:0)
嗯,utf-8现在已成为交换和Linux世界的事实上的标准,但还有很多其他的编码。
常见的例子是latin1,latin9(与€符号相同),cp1252是它们的windows变体。
在你的情况下:
>>> x.encode('cp1252')
'Ko\x9aick\xfd'
因此y
字符串似乎是cp1252
编码的。