Django 中接收 URL 中的中文参数

前几天改造我那个电子课程表时,有个 URL 传递的参数我直接用了中文,像这样:/tt/getxml/?term=2008春。在 IE 中使用很正常,在 Django 里面接收之后用 request.GET.get('term') 直接就可以得到“2008春”。但是后来我用 FF 和 Safari 测试的时候就不行了。研究了一下发现还是得编码成 UTF-8 的形式传递才行。

  在客户端用 Javascript 生成 URL 时,用 encodeURI('2008春') 编码一下形成:/tt/getxml/?term=%E6%98%A5。然后再在 Django 那端用 urllib.unquote(request.GET.get('term')).decode('utf8') 接收就正常了。

  另外,用 Django 的 ORM 读取数据库,并且与 Python 自带的 xml.dom 一起来生成 XML 数据时,有中文的时候就不正常。主要还是编码问题。比如 term.name 是中文的,那么就要用 str(term.name).decode('utf-8') 来写入 xml.dom 生成的结点中,最后用 obj.toxml('utf-8') 来输出 XML 的内容。这样得出的 XML 是 UTF-8 编码的,并且在头那里会有一个 encoding="utf-8" 的属性,这个 XML 才能正确被其它地方解析。

你可能感兴趣的:(JavaScript,xml,django,url,Safari,encoding)