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



我有一个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()方法会为您转义

最新更新