我使用Django的render_to_response
来返回XML文档。这个特定的XML文档是用于基于闪存的图表库。该库要求XML文档以BOM(字节顺序标记)开始。我该如何让Django将BOM用于响应?将BOM添加到来自Django的XML响应
它可以将BOM插入到模板中,但这很不方便,因为每次我编辑文件时Emacs都会删除它。
我试图重写render_to_response
如下,但由于BOM正在UTF-8编码的失败:
def render_to_response(*args, **kwargs):
bom = kwargs.pop('bom', False)
httpresponse_kwargs = {'mimetype': kwargs.pop('mimetype', None)}
s = django.template.loader.render_to_string(*args, **kwargs)
if bom:
s = u'\xef\xbb\xbf' + s
return HttpResponse(s, **httpresponse_kwargs)
我会想象它*是* UTF-8我们正在谈论。一些(通常是微软派生的)软件喜欢将BOM放在UTF-8中,尽管它们毫无意义且有害。一个XML阅读器需要一个,但它破碎了,根本不是一个XML阅读器。 – bobince 2009-09-14 21:16:53
UTF-8中没有BOM之类的东西,因为UTF-8没有字节顺序。如果某些软件依赖于文件中存在的随机垃圾字节,则情况会有所不同。 – 2009-09-14 21:18:57
@Vebjorn:我已经更新了答案以反映您编辑的问题。你的代码已经几乎正确了。 – 2009-09-14 21:23:01