我正在尝试使用premailer将我创建的html文档转换为可以通过电子邮件发送内联css样式的文档。然而,当我尝试进行转换时,我得到了以下错误:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/Users/oldo/Python/virtual-environments/AMS-Journal/lib/python2.7/site-packages/premailer/__main__.py", line 142, in <module>
sys.exit(main(sys.argv[1:]))
File "/Users/oldo/Python/virtual-environments/AMS-Journal/lib/python2.7/site-packages/premailer/__main__.py", line 137, in main
options.outfile.write(p.transform(pretty_print=options.pretty))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 106688: ordinal not in range(128)我已经看到有太多的人提出了类似的问题,但是我似乎无法在纠正错误方面取得任何进展。
我的文件是用utf-8编码的,所以我搞不懂为什么会出现这个错误。
有没有人有什么建议,我可以试着向前迈进一些东西?
发布于 2016-01-09 17:16:18
好的,经过大量的摸索,我终于能够解决问题的根源了。显然,我需要更多地了解文本编码之间的差异以及如何在Python中处理它们。
我传递给premailer的输入文件是用utf-8编码的,程序似乎需要ascii。我使用与mongodb链接的jinja2创建输入文件,并强制将文件写入ascii并忽略错误。
import io
# stuff setting up jinja ready to render the template...
renderedTemplate = template.render(context)
email = io.open('email.html', 'w', encoding='ascii', errors="ignore")
email.write(renderedTemplate)
email.close()我意识到这不是一个理想的解决方案,因为ascii无法识别的utf-8字符将被丢弃,因此可能会有几个看起来很滑稽的单词,但希望这不会是太大的问题。我只是很高兴我的项目再次向前迈进!
发布于 2018-02-18 22:57:02
也有同样的问题,但是html源文件需要utf_8编码。
通过PYTHONIOENCODING在premailer命令前加上显式编码格式,为我解决了这个问题:
PYTHONIOENCODING=utf_8 python -m premailer -f reports.html --external-style ./style/jbehave-core.css > emailable-reports.html在你的案例中可能是另一种情况:
PYTHONIOENCODING=ascii python -m premailer -f report.html --external-style ./style/somestyle.css > emailable-report.html有关在python中设置/更改默认编码的更多信息:Changing default encoding of Python?
https://stackoverflow.com/questions/34681040
复制相似问题