首页 > 解决方案 > 阅读时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

看来解决方案一定很简单,但我找不到。我能做些什么?

谢谢!

标签: python

解决方案


那些不是unicode-escape- 顾名思义,处理 Unicode 序列,如\u00e9但不是\xe9.

你所拥有的是一个 UTF-8 enooded 序列。解码的方法是把它变成一个bytes序列,然后可以解码为一个 Unicode 字符串。

# Let's not shadow the string library
s = "\xc3\xa9comiam"
print(bytes(s, 'latin-1').decode('utf-8'))

诀窍是一个肮脏的'latin-1'秘密,它只是将每个字节转换为具有相同字符代码的字符。

对于您的文件,您可以以二进制模式打开它,这样您就不必将其显式转换为bytes,或者您可以简单地将相同的转换应用于您读取的字符串。


推荐阅读