我正在尝试使用python的difflib.HtmlDiff
模块比较两个阿拉伯字符串。我已经研究了将HtmlDiff
的输出写入文件的各种方法,但似乎没有一种方法适合我。到目前为止我尝试过的方法:
注意:在所有后续代码段中,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:必须是str,而不是bytes
那么,如何将HtmlDiff
生成的Unicode文本编写为python 3中的html文件?
我正在使用python 3.4.3。
答案 0 :(得分:2)
According to the documentation,Python3.5之前的Python版本中的make_file
方法默认为ISO-8859-1的字符集,不包括阿拉伯语。
此外,大多数浏览器都会看到ISO-8859-1并回退到ASCII。因此,您必须在Python3.5中使用该方法才能获得 utf-8 或以不同的方式生成您想要的HTML输出。
编辑:从python 3.5.1开始,虽然make_html
方法使用默认字符集utf-8,但其兄弟方法make_table
却没有,所以要小心使用后者!