diff --git a/django/contrib/gis/geoip/prototypes.py b/django/contrib/gis/geoip/prototypes.py index 3eae261930..8d78386584 100644 --- a/django/contrib/gis/geoip/prototypes.py +++ b/django/contrib/gis/geoip/prototypes.py @@ -23,6 +23,7 @@ class GeoIPRecord(Structure): ('continent_code', c_char_p), ] geoip_char_fields = [name for name, ctype in GeoIPRecord._fields_ if ctype is c_char_p] +GEOIP_DEFAULT_ENCODING = 'iso-8859-1' geoip_encodings = { 0: 'iso-8859-1', 1: 'utf8', @@ -100,7 +101,7 @@ def check_string(result, func, cargs): free(result) else: s = '' - return s.decode() + return s.decode(GEOIP_DEFAULT_ENCODING) GeoIP_database_info = lgeoip.GeoIP_database_info GeoIP_database_info.restype = geoip_char_p @@ -111,7 +112,7 @@ GeoIP_database_info.errcheck = check_string def string_output(func): def _err_check(result, func, cargs): if result: - return result.decode() + return result.decode(GEOIP_DEFAULT_ENCODING) return result func.restype = c_char_p func.errcheck = _err_check diff --git a/django/contrib/gis/geoip/tests.py b/django/contrib/gis/geoip/tests.py index 8d7bdff291..9631a192ab 100644 --- a/django/contrib/gis/geoip/tests.py +++ b/django/contrib/gis/geoip/tests.py @@ -119,3 +119,5 @@ class GeoIPTest(unittest.TestCase): g = GeoIP() d = g.city("www.osnabrueck.de") self.assertEqual('Osnabrück', d['city']) + d = g.country('200.7.49.81') + self.assertEqual('Curaçao', d['country_name']) diff --git a/docs/releases/1.6.3.txt b/docs/releases/1.6.3.txt index e3fccafd5d..45a1ad0c19 100644 --- a/docs/releases/1.6.3.txt +++ b/docs/releases/1.6.3.txt @@ -7,4 +7,6 @@ Django 1.6.3 release notes This is Django 1.6.3, a bugfix release for Django 1.6. Django 1.6.3 fixes several bugs in 1.6.2: -* ... +* Content retrieved from the GeoIP library is now properly decoded from its + default ``iso-8859-1`` encoding + (`#21996 `_).