下面的代码工作正常:打印非ASCII字符
from jinja2 import Template
mylist = ['some text \xc3']
template = Template('{{ list }}')
print template.render(list=mylist)
当我运行它,它输出:
['some text \xc3']
然而,当我尝试打印的实际列表元件,它失败:
template = Template('{{ list[0] }}')
print template.render(list=mylist)
错误是:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 10: ordinal not in range(128)
我想找到一种方法来打印单个列表元件以相同的方式,整个列表打印,其中,所述非ASCII字符表示与\ X表示法。
这是一种糟糕的方法,您应该在渲染前执行任何解码/编码,而不是将此任务委托给模板。我认为''字符串转义'可能不是正确的编码。你的原始输入数据是什么? – schlamar
原始输入数据来自未知来源(网络数据),我不在乎打印时的外观。我只是不想在忍者中出错。 至于在模板中进行编码,我认为这是完全合适的,因为字符串的编码是在视图的域中,这是模板的用途。此外,我在这里给出了一个简单的例子,但是在实际数据中,要编码的项目是较大数据结构的一部分,这将花费不必要的处理时间来额外传递以对值进行预编码。 – chaimp
您将在问题中注意到,当我打印整个列表对象时,我正在寻找一种使其以与字符串打印相同的方式进行打印的方法。这个解决方案似乎正是这样做的。 因此,如果您在我自己的问题的答案中删除倒票,我想我会回答我的问题。否则,请提出一个我感兴趣的替代解决方案。 – chaimp