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

3 投票
3 回答
8714 浏览
提问于 2025-04-18 07:56

我有一个用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 个回答

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() 方法会自动帮你处理这些字符。

1

如果你想在控制台输出文本,并保持相同的格式,那么要知道,UNIX(或者你用的是什么操作系统?)使用的ANSI转义序列和IRC中的不同,所以你需要把IRC的格式转换成UNIX的格式。这里有一些链接可以帮助你入门:
https://stackoverflow.com/a/287944/2660503
在UNIX的终端应用中给文本上色

如果你想打印没有格式的文本,只需要用正则表达式把它清理掉。

11

根据这个回答,更改以下内容应该能得到预期的结果。

在 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')

撰写回答