我有这个str
(来自我无法修复的文件):
In [131]: s
Out[131]: '\\xce\\xb8Oph'
这接近于 utf8 编码的字符串的表示:
In [132]: repr('θOph'.encode('utf8'))
Out[132]: "b'\\xce\\xb8Oph'"
我需要原始编码字符串。我可以用
In [133]: eval("b'{}'".format(s)).decode('utf8')
Out[133]: 'θOph'
但我会……悲伤?如果没有更简单的选择来获得它。有没有更好的办法?
你的解决方案没问题,唯一的问题是eval
与任意输入一起使用时是危险的。安全的替代方法是使用ast.literal_eval
:
>>> s = '\\xce\\xb8Oph'
>>> from ast import literal_eval
>>> literal_eval("b'{}'".format(s)).decode('utf8')
'\u03b8Oph'
通过评估,您将受到:
>>> eval("b'{}'".format("1' and print('rm -rf /') or b'u r owned")).decode('utf8')
rm -rf /
'u r owned'
Since ast.literal_eval
是相反的repr
对于文字,我想这就是您正在寻找的。
[updade]
如果您有一个带有转义 unicode 的文件,您可能需要使用unicode_escape
按照 Ginger++ 的答案中建议的编码。我会保留我的答案,因为问题是“如何将 repr 转换为编码字符串”,而不是“如何使用转义的 unicode 解码文件”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)