从文件中读取UTF-8转义序列
我有一个用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 个回答
有些人建议的解决办法是使用 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()
方法会自动帮你处理这些字符。
如果你想在控制台输出文本,并保持相同的格式,那么要知道,UNIX(或者你用的是什么操作系统?)使用的ANSI转义序列和IRC中的不同,所以你需要把IRC的格式转换成UNIX的格式。这里有一些链接可以帮助你入门:
https://stackoverflow.com/a/287944/2660503
在UNIX的终端应用中给文本上色
如果你想打印没有格式的文本,只需要用正则表达式把它清理掉。
根据这个回答,更改以下内容应该能得到预期的结果。
在 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')