簡體   English   中英

將Python的3字節字符串轉換為`str(utf8_encoded_str)`返回unicode

[英]Converting Python 3 String of Bytes of Unicode - `str(utf8_encoded_str)` back to unicode

好吧,讓我先介紹一下這個問題。

我通過POST / GET請求獲得了一些數據。 數據是UTF-8編碼的字符串。 我幾乎不知道,只是通過str()方法轉換它。 現在我有完整的“無意義數據”數據庫,無法找到回路。

示例代碼:

unicode_str - 這是我應該獲得的字符串

encoded_str - 這是我用POST / GET請求得到的字符串 - 初始數據

bad_str - 我目前在數據庫中擁有的數據,我需要從中獲取unicode。

顯然我知道如何轉換: unicode_str =( encode )=> encoded_str =( str )=> bad_str

但我無法提出解決方案: bad_str =( ??? )=> encoded_str =( decode )=> unicode_str

In [1]: unicode_str = 'Příliš žluťoučký kůň úpěl ďábelské ódy'

In [2]: unicode_str
Out[2]: 'Příliš žluťoučký kůň úpěl ďábelské ódy'

In [3]: encoded_str = unicode_str.encode("UTF-8")

In [4]: encoded_str
Out[4]: b'P\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88 \xc3\xbap\xc4\x9bl \xc4\x8f\xc3\xa1belsk\xc3\xa9 \xc3\xb3dy'

In [5]: bad_str = str(encoded_str)

In [6]: bad_str
Out[6]: "b'P\\xc5\\x99\\xc3\\xadli\\xc5\\xa1 \\xc5\\xbelu\\xc5\\xa5ou\\xc4\\x8dk\\xc3\\xbd k\\xc5\\xaf\\xc5\\x88 \\xc3\\xbap\\xc4\\x9bl \\xc4\\x8f\\xc3\\xa1belsk\\xc3\\xa9 \\xc3\\xb3dy'"

In [7]: new_encoded_str = some_magical_function_here(bad_str) ???

您將一個bytes對象轉換為一個字符串,它只是bytes對象的表示。 您可以使用ast.literal_eval()獲取原始字節對象(Mark Tolonen為建議提供信用),然后使用簡單的decode()來完成工作。

>>> import ast
>>> ast.literal_eval(bad_str).decode('utf-8')
'Příliš žluťoučký kůň úpěl ďábelské ódy'

既然你是生成字符串的人,使用eval()會很安全,但為什么不安全呢?

請不要使用eval,而是:

import codecs
s = 'žluťoučký'
x = str(s.encode('utf-8'))

# strip quotes
x = x[2:-1]

# unescape
x = codecs.escape_decode(x)[0].decode('utf-8')

# profit
x == s

暫無
暫無

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

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