fix decoding in _stringify to not depend on the default encoding

(closes SF bug #1115989)
This commit is contained in:
Fred Drake 2005-02-11 17:59:08 +00:00
parent 4380242580
commit 22c0706a58
2 changed files with 43 additions and 1 deletions

View File

@ -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)

View File

@ -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: