读取而不是键入时的Python编码问题

时间:2019-04-05 14:43:19

标签: python

我正在从文本文件中读取一些字符串。 其中一些字符串具有一些“奇怪”字符,例如“ \ 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

看来解决方案一定很简单,但我找不到。 我该怎么办?

谢谢!

2 个答案:

答案 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'))

谢谢!