python - 在 Python 中处理古怪的编码

标签 python unicode encoding character-encoding

我有一个 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/

相关文章:

php - 如何获得有关用于发送表单数据的编码的提示(在 PHP 中)

python - 支持哪些源包文件类型?

python - 我想将数据帧转换为特定格式的数据帧或列表列表

python - 如何在 Python 中生成 x 转义的 UTF-8?

mysql - MySQL 配置使用 utf8 字符编码的 JDBC url

使用 Amazon 服务进行 Java Base64 编码

python - 为什么属性属于内置重写描述符类型?

python - 使用基于身份的身份验证的 Azure Function App Blob 触发器返回 powershell 错误

python - 在 Python 中从带有重音符号的字符串中删除所有非字母字符

javascript - 正则表达式匹配可以与肤色修饰符有效结合的表情符号?