
On Mon, 22 Oct 2007 07:55:49 -0400, Jean-Paul Calderone exarkun@divmod.com wrote:
[snip]
How can I solve the encoding problem in the XMLRPC server response?
Help resolve #1909. The patch attached to the ticket is at least missing unit tests for the new functionality it provides. If you can provide this, then we might be able to add the feature and resolve the ticket
Actually, this is wrong, please disregard it. :)
#1909 is misguided and the attached patch is incorrect. Specifying the encoding parameter to xmlrpclib.dumps() doesn't do anything to solve the problem here.
You either need to specify the encoding in the content-type header of the response or you need to use UTF-8 (the default encoding for XML). Of these, you can already do the latter without changing anything in Twisted, since xmlrpclib will emit UTF-8 if you pass it unicode instead of already encoded strings.
So the solution to your problem is to return unicode in your result, instead of already encoded strings. These will be encoded to UTF-8, which will be decoded properly by the client.
Compare:
from xml.dom.minidom import parseString from xmlrpclib import dumps parseString(dumps((u'fòò',)))
<xml.dom.minidom.Document instance at 0xb7c0080c>
and
parseString(dumps((u'fòò'.encode('latin-1'),), encoding='latin-1'))
Traceback (most recent call last): File "<stdin>", line 1, in ? File "/home/exarkun/.local/lib/python2.4/site-packages/_xmlplus/dom/minidom.py", line 1925, in parseString return expatbuilder.parseString(string) File "/home/exarkun/.local/lib/python2.4/site-packages/_xmlplus/dom/expatbuilder.py", line 942, in parseString return builder.parseString(string) File "/home/exarkun/.local/lib/python2.4/site-packages/_xmlplus/dom/expatbuilder.py", line 223, in parseString parser.Parse(string, True) xml.parsers.expat.ExpatError: not well-formed (invalid token): line 3, column 16
Jean-Paul