将\x转义字符串转换为UTF-8

9

如何将类似于'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'的字符串转换为可读格式?


请注意,这不是 https://dev59.com/6G865IYBdhLWcg3wCp9A 的重复;输入表示UTF-8字节,在反斜杠转义序列取消转义后必须重新解释为UTF-8。 - Karl Knechtel
2个回答

21

在 Python 2.7 中

>>> print '\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
привет

>>> print '\\xd0\\xbf\\xd1\\x80\\xd0\\xb8\\xd0\\xb2\\xd0\\xb5\\xd1\\x82'.decode('string-escape')
привет
>>> print r'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'.decode('string-escape')
привет

在 Python 3.x 中

>>> br'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'.decode('unicode-escape').encode('latin1').decode('utf-8')
'привет'

2
打印('\xd0\xb6\xd0\xbe\xd0\xbf\xd0\xb0') жопа
- eri
我建议 @synapse 使用 r'\xd0\xb6\xd0\xbe\xd0\xbf\xd0\xb0',即带有斜杠的字符串。 - eri
@eri,我有意使用“\”而不是原始字符串,因为这个问题不仅限于Python。 - falsetru
4
@falsetru 顺便说一下,这个词在俄语中相当粗鲁。 - alecxe
@alecxe,糟糕,我会尽快更改代码。 - falsetru
终于找到解决方案了!Python文档在哪里指定了这种情况? - selfboot

0

如果要进行文件读取,可以使用这个方法代替 open()

import codecs
with codecs.open('filename','r','string-escape') as f:
    data=f.read()

data读取时会重新编码,f读取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接