我有这个str
(来自我无法修复的文件):
In [131]: s
Out[131]: '\\xce\\xb8Oph'
这接近于utf8编码的字符串的repr:
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,您将受到以下限制:
>>> eval("b'{}'".format("1' and print('rm -rf /') or b'u r owned")).decode('utf8')
rm -rf /
'u r owned'
由于ast.literal_eval
与repr
字面量相反,我想这就是您要查找的内容。
[更新]
如果您的文件带有转义的unicode,则可能要按照unicode_escape
Ginger ++的答案中建议的编码打开文件。我将保留我的答案,因为问题是“如何将repr转换为编码的字符串”,而不是“如何使用转义的unicode解码文件”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句