我有一个utf-8编码的文件,包含多行,如
<>之前我不喜欢香蕉嘿,你好吗?你叫什么?之前我如何读取该文件的行到一个列表,解码所有的转义序列?我尝试了下面的代码:
with codecs.open(file, 'r', encoding='utf-8') as q:
quotes = q.readlines()
print(str(random.choice(quotes)))
但是它打印该行而不解码转义字符。
我不喜欢x0307bananasx03x02
(注意:转义字符是IRC颜色代码,x02
是加粗文本的字符,x03
是颜色代码的前缀。此外,这段代码来自我的IRC聊天机器人,其中MSG函数被print()
)
根据这个答案,更改以下内容应该会得到预期的结果。
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')
如果您想以相同的格式输出文本到控制台,那么关键是,UNIX(或您使用的操作系统?)使用与IRC中不同的ANSI转义序列,因此您必须将IRC格式转换为UNIX格式。下面是开始的链接:
https://stackoverflow.com/a/287944/2660503
UNIX终端应用程序中的彩色文本
如果您想打印文本而不需要格式化,只需使用regexp清理它。
解决方案,正如一些人建议的那样是使用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 x0307bananasx03.x02
的结果实际上是"\x02I don't like \x0307bananas\x03.\x02n"
,因为readlines()
方法会为您转义