中文字符串:
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
那么,我怎样才能在情境中找到正确的中文字符串?
答案 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已经发布了类似且可能更好的解决方案。