utf-8进行.epub转换的输出格式不好

时间:2019-03-18 11:29:48

标签: python utf-8 epub

我想将.pub的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 cusprijinul Ministryului Afacerilor Externe \ xe2 \ x80 \ x93 Departamentul Politici pentru Rela \ xc8 \ x9bia cu Rom \ xc3 \ xa2nii de Pretutindeni.'b''b' p>'b''b''

那些字符,例如“ xc4”,我假设它们来自我语言中的特殊字符,因为这本书是用我的语言编写的。

1 个答案:

答案 0 :(得分:0)

您正在进行不必要的编码/解码往返。

检查一下这个互动小会议:

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

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

打开结果文件时,请确保使用支持UTF-8的编辑器。 值得注意的是,诸如“记事本”之类的“简单” Windows工具通常无法正确显示UTF-8文件。