我有一个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()
)
答案 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
如果要打印文本而不进行格式化,只需使用正则表达式进行清理即可。