Выходной формат преобразования .epub с utf-8 плох - PullRequest
0 голосов
/ 18 марта 2019

Я хочу написать файл 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")))

Все хорошо, но главная проблема в том, что выводнаходится в этом формате:

Электронный карт \ xc4 \ x83 publicat \ xc4 \ x83 cu sprijinul Министерли Ауриллор Экстерн \ xe2 \ x80 \ x93 Департамент политических отношений \ xc8 \ x9bia cu Ром \ xc3 \ xa2niide Pretutindeni.'b '' b '

' b''b ''

Эти символы, подобные "xc4", я предполагаю, что они из специальных символов моего языка, потому что книгабыло написано на моем языке.

1 Ответ

0 голосов
/ 18 марта 2019

Вы совершаете ненужное кодирование / декодирование в оба конца.

Проверьте этот небольшой интерактивный сеанс:

>>> s = 'electronică'
>>> b = s.encode('utf-8')
>>> b
b'electronic\xc4\x83'
>>> str(b)
"b'electronic\\xc4\\x83'"
  • Сначала у вас есть строка s, которую вы кодируете - вы получаете объект bytes (обратите внимание на обозначение b'...').
  • Затем вы вызываете str() для него, который снова преобразует его в строку - но не путем декодирования, а с использованием дополнительных кавычек и escape-последовательностей.
  • Когда вы вызываете 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.

...