首先,让我介绍一下问题。
我通过 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) ???
eval
,但由于我不知道有什么数据以及有很多数据,所以我希望我可以避免这种情况 - 因此没有提到它。但还是谢谢 :) - darklessast.literal_eval
与eval
相比,能够实现相同的功能,但没有安全风险。 - Mark Toloneneval()
版本也符合你的要求。 - Reti43