diff options
author | Fred Drake <fdrake@acm.org> | 2005-02-11 17:59:08 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2005-02-11 17:59:08 (GMT) |
commit | 22c0706a584fc0de8648d24caa0520367c304235 (patch) | |
tree | 189b6217f2115a2432e4d37f0f33d0f30efd98d9 /Lib | |
parent | 438024258078d46e76c55cbf35d387725034be19 (diff) | |
download | cpython-22c0706a584fc0de8648d24caa0520367c304235.zip cpython-22c0706a584fc0de8648d24caa0520367c304235.tar.gz cpython-22c0706a584fc0de8648d24caa0520367c304235.tar.bz2 |
fix decoding in _stringify to not depend on the default encoding
(closes SF bug #1115989)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_xmlrpc.py | 42 | ||||
-rw-r--r-- | Lib/xmlrpclib.py | 2 |
2 files changed, 43 insertions, 1 deletions
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index 8fa63de..b80de18 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -4,6 +4,13 @@ import unittest import xmlrpclib from test import test_support +try: + unicode +except NameError: + have_unicode = False +else: + have_unicode = True + alist = [{'astring': 'foo@bar.baz.spam', 'afloat': 7283.43, 'anint': 2**20, @@ -56,6 +63,41 @@ class XMLRPCTestCase(unittest.TestCase): xmlrpclib.loads(strg)[0][0]) self.assertRaises(TypeError, xmlrpclib.dumps, (arg1,)) + def test_default_encoding_issues(self): + # SF bug #1115989: wrong decoding in '_stringify' + utf8 = """<?xml version='1.0' encoding='iso-8859-1'?> + <params> + <param><value> + <string>abc \x95</string> + </value></param> + <param><value> + <struct> + <member> + <name>def \x96</name> + <value><string>ghi \x97</string></value> + </member> + </struct> + </value></param> + </params> + """ + old_encoding = sys.getdefaultencoding() + reload(sys) # ugh! + sys.setdefaultencoding("iso-8859-1") + try: + (s, d), m = xmlrpclib.loads(utf8) + finally: + sys.setdefaultencoding(old_encoding) + items = d.items() + if have_unicode: + self.assertEquals(s, u"abc \x95") + self.assert_(isinstance(s, unicode)) + self.assertEquals(items, [(u"def \x96", u"ghi \x97")]) + self.assert_(isinstance(items[0][0], unicode)) + self.assert_(isinstance(items[0][1], unicode)) + else: + self.assertEquals(s, "abc \xc2\x95") + self.assertEquals(items, [("def \xc2\x96", "ghi \xc2\x97")]) + def test_main(): test_support.run_unittest(XMLRPCTestCase) diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py index 21cc3d0..13a7562 100644 --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -173,7 +173,7 @@ if unicode: def _stringify(string): # convert to 7-bit ascii if possible try: - return str(string) + return string.encode("ascii") except UnicodeError: return string else: |