所有给出的答案都无法处理一般的Unicode字符串。以下内容适用于Python3中的所有情况,据我所知:
from codecs import encode, decode
sample = u'mon€y\\nröcks'
result = decode(encode(sample, 'latin-1', 'backslashreplace'), 'unicode-escape')
print(result)
在最近的Python版本中,这也可以在不导入任何模块的情况下工作:
sample = u'mon€y\\nröcks'
result = sample.encode('latin-1', 'backslashreplace').decode('unicode-escape')
如obataku所建议的,你也可以使用ast
模块中的literal_eval
方法,操作如下:
import ast
sample = u'mon€y\\nröcks'
print(ast.literal_eval(F'"{sample}"'))
当你的字符串确实包含一个字符串字面量(包括引号)时,可以这样写:
import ast
sample = u'"mon€y\\nröcks"'
print(ast.literal_eval(sample))
然而,如果您不确定输入字符串使用双引号还是单引号作为分隔符,或者无法假定它完全被正确转义,则
literal_eval
可能会引发
SyntaxError
,而编码/解码方法仍将正常工作。
'\n'
),你可以使用s.replace('\\n', '\n')
。我没有发布回答是因为问题更为普遍,但我有类似的问题,并且不想用字节和编码来复杂化自己,所以把这个放在这里供其他人参考... - Tomerikoo