在python中解码hex utf8字符串

时间:2015-10-14 04:57:51

标签: python utf-8

中文字符串:

situation a:
str = "\\xE4\\xBF\\xA1\\xE9\\x94\\x90\\xE7\\xBD\\x91\\xE7\\xA7\\x91\\xE6\\x8A\\x80\\xE6\\x9C\\xAF"
print str.decode('utf-8')
#get:\xE4\xBF\xA1\xE9\x94\x90\xE7\xBD\x91\xE7\xA7\x91\xE6\x8A\x80\xE6\x9C\xAF

situation b:
str = '\xE4\xBF\xA1\xE9\x94\x90\xE7\xBD\x91\xE7\xA7\x91\xE6\x8A\x80\xE6\x9C\xAF'
print str.decode('utf-8')
#get: correct chinese string

那么,我怎样才能在情境中找到正确的中文字符串?

3 个答案:

答案 0 :(得分:1)

在一些预处理后使用ast.literal_eval。如果你可以假设字符串不包含引号字符,那就特别容易了:

str = "\\xE4\\xBF\\xA1\\xE9\\x94\\x90\\xE7\\xBD\\x91\\xE7\\xA7\\x91\\xE6\\x8A\\x80\\xE6\\x9C\\xAF"
print ast.literal_eval('"' + str + '"').decode('utf-8')

如果它可以包含引号,你必须做更多的工作来逃避内部引号,但它是相同的基本思想。在Python 3上,代码必须根据您的输入是str还是bytes而改变;它很复杂,但无论如何你都清楚地运行Python 2.

答案 1 :(得分:1)

x1 ="\\xE4\\xBF\\xA1\\xE9\\x94\\x90\\xE7\\xBD\\x91\\xE7\\xA7\\x91\\xE6\\x8A\\x80\\xE6\\x9C\\xAF"


x1 = x1.decode('string_escape')
print x1

你可能会做这样的事情。

答案 2 :(得分:0)

试试这个,如果你可以清理字符串并确保它不包含任何恶意内容:

str = "\\xE4\\xBF\\xA1\\xE9\\x94\\x90\\xE7\\xBD\\x91\\xE7\\xA7\\x91\\xE6\\x8A\\x80\\xE6\\x9C\\xAF"
str = eval('"' + str  + '"')
str = str.decode('utf-8')
print str

我看到ShadowRanger已经发布了类似且可能更好的解决方案。