我有一个 Python 脚本,可以从许多来源(数据库、文件等)中提取数据。据推测,所有字符串都是 unicode,但我最终得到的是以下主题的任何变体(由 repr()
返回):
u'D\\xc3\\xa9cor'
u'D\xc3\xa9cor'
'D\\xc3\\xa9cor'
'D\xc3\xa9cor'
是否有一种可靠的方法来获取上述任意四个字符串并返回正确的 unicode 字符串?
u'D\xe9cor' # --> Décor
我现在能想到的唯一方法是使用 eval()
、replace()
,以及永远无法洗去的深深、燃烧的耻辱。
最佳答案
那只是 UTF-8 data .使用 .decode
将其转换为 unicode
。
>>> 'D\xc3\xa9cor'.decode('utf-8')
u'D\xe9cor'
您可以为 'D\\xc3\\xa9cor'
情况执行额外的字符串转义解码。
>>> 'D\xc3\xa9cor'.decode('string-escape').decode('utf-8')
u'D\xe9cor'
>>> 'D\\xc3\\xa9cor'.decode('string-escape').decode('utf-8')
u'D\xe9cor'
>>> u'D\\xc3\\xa9cor'.decode('string-escape').decode('utf-8')
u'D\xe9cor'
同样要处理第二种情况,您需要检测输入是否为 unicode
,然后先将其转换为 str
。
>>> def conv(s):
... if isinstance(s, unicode):
... s = s.encode('iso-8859-1')
... return s.decode('string-escape').decode('utf-8')
...
>>> map(conv, [u'D\\xc3\\xa9cor', u'D\xc3\xa9cor', 'D\\xc3\\xa9cor', 'D\xc3\xa9cor'])
[u'D\xe9cor', u'D\xe9cor', u'D\xe9cor', u'D\xe9cor']
关于python - 在 Python 中处理古怪的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2987305/