From: Johannes Gorset Date: Thu, 12 May 2011 08:16:21 +0000 (+0200) Subject: Encode both keys and values for incoming unicode data as UTF-8, coincidentally fixing... X-Git-Tag: v0.6.0~256^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=23ee58d6ec47a06358008cb7a4ab4f9556edc285;p=services%2Fpython-requests.git Encode both keys and values for incoming unicode data as UTF-8, coincidentally fixing a bug that caused UTF-8 encoded byte strings to be encoded twice and causing an UnicodeDecodeError. --- diff --git a/requests/core.py b/requests/core.py index b2bad89..f12797e 100644 --- a/requests/core.py +++ b/requests/core.py @@ -70,13 +70,16 @@ class Request(object): self.headers = headers self.files = files self.method = method - self.data = data + + self.data = {} + for (k, v) in data.items(): + self.data.update({ + k.encode('utf-8') if k.__class__ is unicode else k: \ + v.encode('utf-8') if v.__class__ is unicode else v + }) socket.setdefaulttimeout(timeout) - for (k, v) in self.data.iteritems(): - self.data[k] = v.encode('utf-8') - # url encode data if it's a dict if hasattr(data, 'items'): self._enc_data = urllib.urlencode(self.data) diff --git a/test_requests.py b/test_requests.py index c73803c..89b69ac 100755 --- a/test_requests.py +++ b/test_requests.py @@ -141,6 +141,8 @@ class RequestsTestSuite(unittest.TestCase): def test_unicode_get(self): requests.get('http://google.com', params={'foo': u'føø'}) + requests.get('http://google.com', params={u'føø': u'føø'}) + requests.get('http://google.com', params={'føø': 'føø'}) requests.get('http://google.com', params={'foo': u'foo'}) requests.get('http://google.com/ø', params={'foo': u'foo'})