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