在 xml 中写入编码

Write encoding in xml

我使用 Django REST Framework,一切正常,但我有一个问题。

结果-xml 我有字符串:

<?xml version="1.0" ?>

但我确实需要将其更改为:

<?xml version="1.0" encoding="utf-8"?>

我找不到相关信息。这个怎么做?

谢谢!

我相信最新版本的django rest框架会自动处理这个问题。当我用下面的代码测试它时,我可以清楚地看到你想要的header:

from rest_framework.renderers import XMLRenderer
renderer = XMLRenderer()
print renderer.render('foo')

>>> '<?xml version="1.0" encoding="utf-8"?>\n<root>foo</root>'

如果您无法升级您的依赖项,那么您可以按照下面的步骤创建您自己的渲染器子 class,这将添加正确的 header。以下所有示例均适用于最新版本的库,因此您发现的内容可能有所不同。

django rest 框架使用渲染器来写出内容。这些在 rest_framework/renderers.py 中可用。这是您要更改的部分:

    xml = SimplerXMLGenerator(stream, self.charset)
    xml.startDocument()
    xml.startElement("root", {})

碰巧它使用了本身基于xml.sax.saxutils.XMLGenerator的django SimplerXMLGenerator。我发现在我的系统上有以下代码:

$ python -c 'import xml.sax.saxutils; print xml.sax.saxutils.__file__'
/usr/lib/python2.7/xml/sax/saxutils.pyc

有一个关联的 py 文件。在该文件中,我可以找到 XMLGenerator class 并且它包含一个编码参数:

    def startDocument(self):
    self._write('<?xml version="1.0" encoding="%s"?>\n' %
                    self._encoding)

在最新版本中,字符集 已经 设置为 utf-8,因此它会生成您需要的 header。