diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index adc8804..98fbdfc 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -134,7 +134,11 @@ class WSGIRequest(http.HttpRequest):
             # The WSGI spec says 'QUERY_STRING' may be absent.
             raw_query_string = self.environ.get('QUERY_STRING', str(''))
             if six.PY3:
-                raw_query_string = raw_query_string.encode('iso-8859-1').decode('utf-8')
+                try:
+                    # Assuming first that the query string has been utf-8 encoded
+                    raw_query_string = raw_query_string.encode('iso-8859-1').decode('utf-8')
+                except UnicodeDecodeError:
+                    pass
             self._get = http.QueryDict(raw_query_string, encoding=self._encoding)
         return self._get
 
diff --git a/tests/handlers/tests.py b/tests/handlers/tests.py
index f5dc7c8..99dc1ba 100644
--- a/tests/handlers/tests.py
+++ b/tests/handlers/tests.py
@@ -44,12 +44,16 @@ class HandlerTests(TestCase):
     def test_non_ascii_query_string(self):
         """Test that non-ASCII query strings are properly decoded (#20530)."""
         environ = RequestFactory().get('/').environ
-        raw_query_string = 'want=café'
-        if six.PY3:
-            raw_query_string = raw_query_string.encode('utf-8').decode('iso-8859-1')
-        environ['QUERY_STRING'] = raw_query_string
-        request = WSGIRequest(environ)
-        self.assertEqual(request.GET['want'], "café")
+        raw_query_strings = ['want=café', 'want=cafÃ', 'want=cafÃ©']
+        got = []
+        for raw_query_string in raw_query_strings:
+            environ['QUERY_STRING'] = raw_query_string
+            request = WSGIRequest(environ)
+            got.append(request.GET['want'])
+        if six.PY2:
+            self.assertListEqual(got, ['café', 'cafÃ', 'cafÃ©'])
+        else:
+            self.assertListEqual(got, ['café', 'cafÃ', 'café'])
 
     def test_non_ascii_cookie(self):
         """Test that non-ASCII cookies set in JavaScript are properly decoded (#20557)."""
