繁体   English   中英

CSV Jinja2模板呈现Unicode错误

[英]csv Jinja2 template render unicode error

我正在尝试使用来自csv文件的变量渲染jinja2模板:

# -*- coding: utf-8 -*-

import csv
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('baseconfig.j2')

with open('C:\Users\\robertph\CompanyA.csv', mode='r') as csvfile:
    dictReader = csv.DictReader(csvfile)
    for row in dictReader:
        hostname = row['hostname'] + '.txt'
        with open('C:\Users\\robertph\host_vars\\' + hostname,'w') as fh:
            fh.write(template.render(row))

但是出现以下错误:

File ".\csv2dict_test2.py", line 18, in <module>
    fh.write(template.render(row))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 2042: ordinal not in range(128)

我想我理解的错误是我在某个地方有一个unicode字符¦但我不知道在哪里,尽管我同时搜索了模板和dictReader。 我已经阅读了文档( http://jinja.pocoo.org/docs/dev/api/#unicode ),但不了解如何缓解此错误。

这里涉及的字符是U + 2013 EN DASH ,它是模板的一部分; 您的CSV输入都是ASCII字节串(否则Jinja2会抱怨它们)。

您可以对模板结果进行编码:

fh.write(template.render(row).encode('utf8'))

或者您可以从模板文件中删除该破折号。

Jinja模板始终呈现为Unicode字符串,但是Python 2文件对象需要编码的字符串。 如果您之前没有看到这种情况,是因为如果不是针对您模板的非ASCII码点,则对ASCII的隐式编码将会成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM