从文件中读取utf-8转义序列

时间:2014-05-29 12:52:14

标签: python python-unicode utf8-decode

我有一个utf-8编码文件,其中包含多行,如

\x02I don't like \x0307bananas\x03.\x02
Hey, how are you doing?
You called?

如何将该文件的行读取到列表中,解码所有转义序列? 我尝试了下面的代码:

with codecs.open(file, 'r', encoding='utf-8') as q:
    quotes = q.readlines()

print(str(random.choice(quotes)))

但它会在不解码转义字符的情况下打印该行。

\x02I don't like \x0307bananas\x03\x02

(注意:转义字符是IRC颜色代码,\x02是粗体文本的字符,颜色代码是\x03前缀。此外,此代码来自我的IRC机器人,具有MSG功能替换为print()

3 个答案:

答案 0 :(得分:4)

根据this answer,更改以下内容应具有预期效果。

在Python 3中

codecs.open(file, 'r', encoding='utf-8')

codecs.open(file, 'r', encoding='unicode_escape')

在Python 2中

codecs.open(file, 'r', encoding='string_escape')

答案 1 :(得分:1)

正如一些人所建议的那样,解决方案是使用 codecs.open(file, 'r', encoding='unicode_escape'),一旦实施,它将如下所示:

with codecs.open(file, 'r', encoding='unicode_escape') as q:
    quotes = q.readlines()

print(str(random.choice(quotes)))

如果您使用常规 utf-8 解码,\x02I don't like \x0307bananas\x03.\x02 的结果实际上将是 "\\x02I don't like \\x0307bananas\\x03.\\x02\n",因为 readlines() 方法会为您转义字符

答案 2 :(得分:0)

如果要将文本输出到具有相同格式的控制台,那么重点是,UNIX(或者您使用的操作系统?)使用的ANSI转义序列与IRC中的转义序列不同,因此您必须将IRC格式转换为UNIX格式。这些是开始的链接:
https://stackoverflow.com/a/287944/2660503
Color text in terminal applications in UNIX

如果要打印文本而不进行格式化,只需使用正则表达式进行清理即可。