簡體   English   中英

如何在Python中比較unicode和字符串?

[英]How to compare unicode and string in Python?

我有兩個變量(假設xy )具有以下值:

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Û

所以,我完全感到困惑。 有沒有辦法使所有內容保持相同格式?

您可以將字節字符串轉換為Unicode,但是如果它包含任何非ASCII字符,則必須指定編碼。

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

對於您給出的示例,這是不正確的; 但也許y編碼不同。

從理論上講,您可以采用任何一種方式進行轉換,但是通常,在內部使用all-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

輸出:

True
True

最佳實踐是在程序輸入時將文本轉換為Unicode,以Unicode進行所有處理,然后轉換回編碼的字節以持久存儲,在套接字上傳輸等。

好吧,utf-8現在是事實上的交換標准,在Linux世界中也是如此,但是還有許多其他編碼。

常見的示例是latin1,latin9(與€符號相同)和cp1252(它們的Windows變體)。

在您的情況下:

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

因此y字符串似乎是cp1252編碼的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM