diff --git a/httmock.py b/httmock.py index a69e6bc..a36abe9 100644 --- a/httmock.py +++ b/httmock.py @@ -39,14 +39,14 @@ def response(status_code=200, content='', headers=None, reason=None, elapsed=0, request=None, stream=False, http_vsn=11): res = requests.Response() res.status_code = status_code + res.headers = structures.CaseInsensitiveDict(headers or {}) + res.encoding = utils.get_encoding_from_headers(res.headers) if isinstance(content, (dict, list)): - content = json.dumps(content).encode('utf-8') + content = json.dumps(content).encode(res.encoding or 'utf-8') if isinstance(content, text_type): - content = content.encode('utf-8') + content = content.encode(res.encoding or 'utf-8') res._content = content res._content_consumed = content - res.headers = structures.CaseInsensitiveDict(headers or {}) - res.encoding = utils.get_encoding_from_headers(res.headers) res.reason = reason res.elapsed = datetime.timedelta(elapsed) res.request = request diff --git a/tests.py b/tests.py index 9d4cabb..6cf8ad8 100644 --- a/tests.py +++ b/tests.py @@ -58,6 +58,15 @@ def charset_utf8(url, request): } } +@all_requests +def charset_ISO88591(url, request): + return { + 'content': u'
google
'.encode('ISO-8859-1'), + 'status_code': 200, + 'headers': { + 'Content-Type': 'text/html; charset=ISO-8859-1' + } + } def any_mock(url, request): return 'Hello from %s' % (url.netloc,) @@ -137,6 +146,13 @@ def test_encoding_from_contenttype(self): self.assertEqual(r.text, u'Motörhead') self.assertEqual(r.content, r.text.encode('utf-8')) + def test_encoding_from_non_utf8_contenttype(self): + with HTTMock(charset_ISO88591): + r = requests.get('http://google.com/') + self.assertEqual(r.encoding, 'ISO-8859-1') + self.assertEqual(r.text, u'
google
') + self.assertEqual(r.content, r.text.encode('ISO-8859-1')) + def test_has_raw_version(self): with HTTMock(any_mock): r = requests.get('http://example.com')