dar*_*ess 11 python string 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) ???
Run Code Online (Sandbox Code Playgroud)
Ret*_*i43 12
您将一个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'
Run Code Online (Sandbox Code Playgroud)
由于你是生成字符串的人,使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |