首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Premailer - UnicodeEncodeError:'ascii‘编解码器无法编码位置中的字符u'\u2013’

Premailer - UnicodeEncodeError:'ascii‘编解码器无法编码位置中的字符u'\u2013’
EN

Stack Overflow用户
提问于 2016-01-08 23:55:44
回答 2查看 1.1K关注 0票数 1

我正在尝试使用premailer将我创建的html文档转换为可以通过电子邮件发送内联css样式的文档。然而,当我尝试进行转换时,我得到了以下错误:

代码语言:javascript
复制
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编码的,所以我搞不懂为什么会出现这个错误。

有没有人有什么建议,我可以试着向前迈进一些东西?

EN

回答 2

Stack Overflow用户

发布于 2016-01-09 17:16:18

好的,经过大量的摸索,我终于能够解决问题的根源了。显然,我需要更多地了解文本编码之间的差异以及如何在Python中处理它们。

我传递给premailer的输入文件是用utf-8编码的,程序似乎需要ascii。我使用与mongodb链接的jinja2创建输入文件,并强制将文件写入ascii并忽略错误。

代码语言:javascript
复制
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字符将被丢弃,因此可能会有几个看起来很滑稽的单词,但希望这不会是太大的问题。我只是很高兴我的项目再次向前迈进!

票数 0
EN

Stack Overflow用户

发布于 2018-02-18 22:57:02

也有同样的问题,但是html源文件需要utf_8编码。

通过PYTHONIOENCODING在premailer命令前加上显式编码格式,为我解决了这个问题:

代码语言:javascript
复制
PYTHONIOENCODING=utf_8 python -m premailer -f reports.html --external-style ./style/jbehave-core.css > emailable-reports.html

在你的案例中可能是另一种情况:

代码语言:javascript
复制
PYTHONIOENCODING=ascii python -m premailer -f report.html --external-style ./style/somestyle.css > emailable-report.html

有关在python中设置/更改默认编码的更多信息:Changing default encoding of Python?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34681040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档