使用 utf-8 的 .epub 转换的输出格式是错误的

Output format of an .epub conversion with utf-8 is bad

我想将 epub 文件从 .epub 写入 .txt 并只获取文本,我找到了一个库来完成它。

import epub_conversion

f = open("demofile.txt", "a")
book = open_book("razvansividra.epub")
lines = convert_epub_to_lines(book)

for line in lines:
    f.writelines(str(line.encode("utf-8")))

一切都很好,但主要问题是输出格式如下:

Carte electronic\xc4\x83 publicat\xc4\x83 cu sprijinul Ministerului Afacerilor Externe \xe2\x80\x93 Departamentul Politici pentru Rela\xc8\x9bia cu Rom\xc3\xa2nii de Pretutindeni.'b' 'b'

'b''b''

那些像 "xc4" 这样的字符 我假设它们来自我的语言中的特殊字符,因为这本书是用我的语言写的。

您正在进行不必要的 encoding/decoding 往返。

查看这个小型互动会话:

>>> s = 'electronică'
>>> b = s.encode('utf-8')
>>> b
b'electronic\xc4\x83'
>>> str(b)
"b'electronic\xc4\x83'"
  • 首先,你有一个字符串 s,你对其进行编码 - 你会得到一个 bytes 对象(注意 b'...' 符号)。
  • 然后您对其调用 str(),它再次将其转换回字符串——但不是通过解码,而是通过使用额外的引号和转义序列。
  • 当您调用 f.writelines() 时,该字符串在内部再次解码以将其写入磁盘。但是因为它都是 ASCII,所以最后一步并不明显。

您应该确保从一开始就使用正确的编码打开文件。 那么你就不必再使用 line.encode('utf-8')

因此:

f = open("demofile.txt", "w", encoding="utf-8")

然后:

f.writelines(lines)

请注意,如果您使用 writelines,则无需执行 for line in lines;它已经意味着与可迭代的行一起使用。

打开生成的文件时,请确保使用支持 UTF-8 的编辑器。 值得注意的是 "simple" Windows 记事本等工具通常无法正确显示 UTF-8 文件。