我使用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