我正在从文本文件中读取一些字符串。 其中一些字符串具有一些“奇怪”字符,例如“ \ xc3 \ xa9comiam”。 如果我复制该字符串并将其粘贴到变量中,则可以将其转换为可读字符:
string = "\xc3\xa9comiam"
print(string.encode("raw_unicode_escape").decode('utf-8'))
écomiam
但是如果我从文件中读取它,它将无法正常工作:
with open(fn) as f:
for string in f.readlines():
print(string.encode("raw_unicode_escape").decode('utf-8'))
\xc3\xa9comiam
看来解决方案一定很简单,但我找不到。 我该怎么办?
谢谢!
答案 0 :(得分:0)
不是unicode-escape
的那些字符-顾名思义,它处理的是Unicode序列,例如\u00e9
,而不是\xe9
。
您拥有的是UTF-8编码序列。解码的方法是将其转换为bytes
序列,然后可以将其解码为Unicode字符串。
# Let's not shadow the string library
s = "\xc3\xa9comiam"
print(bytes(s, 'latin-1').decode('utf-8'))
'latin-1'
技巧是一个肮脏的秘密,它只是将每个字节转换为具有相同字符代码的字符。
对于文件,您可以将其以二进制模式打开,这样就不必将其明确转换为bytes
,也可以将相同的转换应用于所读取的字符串。
答案 1 :(得分:0)
感谢大家的帮助,
我认为,我已经找到了解决方案(虽然不是很优雅,但是可以解决问题)。
print(bytes(tm.strip(), "utf-8").decode("unicode_escape").encode("raw_unicode_escape").decode('utf-8'))
谢谢!