Я пытаюсь сравнить две арабские строки, используя модуль difflib.HtmlDiff
python. Я просмотрел различные способы записи выходов из файла HtmlDiff
в файл, но ни один из них не работает для меня. Методы я пытался до сих пор:Не удалось написать вывод HtmlDiff, содержащий текст unicode в python 3
Примечание: во всех последующих фрагментах коды, original
и mockinputs
списков строк, в соответствии с требованиями HtmlDiff
, текст Unicode, в частности, арабское.
Method 1
import difflib
hdiff = difflib.HtmlDiff()
html = hdiff.make_file(original, mockinputs)
with open('out_file.html', 'w', encoding='utf-8') as out_file:
out_file.write(html)
Это выполняется без ошибок, но HTML-файл, созданный тарабарщина (вещи, как الرØÙ
) при открытии в браузере.
Method 2
(как было указано
here)
import difflib
htmldiff = difflib.HtmlDiff()
html = htmldiff.make_file(original, mockinputs)
out_file = open('out_file.html', 'w')
out_file.write(html.encode('utf-8'))
out_file.close()
Это дает мне эту ошибку:
TypeError: must be str, not bytes
Итак, как я могу писать Unicode тексты, подготовленные HtmlDiff
, как показано здесь HTML-файл в Python 3 ?
Я использую python 3.4.3.
Это предположение, но в документации для 'difflib' говорится, что метод' make_file' был изменен для Python 3.5 для кодировки по умолчанию «utf-8»: https://docs.python.org/ 3/library/difflib.html # difflib.HtmlDiff.make_file Пробовал ли вы это в Python3.5? Если бы мне пришлось делать ставки, я бы посмотрел на этот метод 'make_file' как на виновника. Кроме того, ваши первые две попытки делают то же самое, и можете ли вы заставить 'difflib' работать без создания таблицы HTML? – erewok
Спасибо, что указали на это новое изменение в 3.5. Я думаю, что это билет :-) Но посмотрим, что еще появляется! –
В документации, приведенной выше, говорится, что 'make_file' имел стандартную кодировку' ISO-8859-1', которая не включала бы арабский. Кроме того, большинство браузеров собираются увидеть «ISO-8859-1» и вернуться к ASCII (по крайней мере, они привыкли). Таким образом, вы должны использовать Python3.5 или генерировать результат самостоятельно. (Nevermind, вы его нашли ...) – erewok