From: Georg Brandl Date: Tue, 26 May 2009 18:31:11 +0000 (+0000) Subject: #6118: dont ignore encoding arguments for arguments with spaces in quote_plus(). X-Git-Tag: v3.1rc1~43 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=faf4149f72575a826f65f7e0747254088195ef9b;p=python #6118: dont ignore encoding arguments for arguments with spaces in quote_plus(). --- diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index da6bc2d488..ba742afc14 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -510,6 +510,21 @@ class QuotingTests(unittest.TestCase): self.assertEqual(expect, result, "using quote(): %r != %r" % (expect, result)) + def test_quote_plus_with_unicode(self): + # Encoding (latin-1) test for quote_plus + given = "\xa2\xd8 \xff" + expect = "%A2%D8+%FF" + result = urllib.parse.quote_plus(given, encoding="latin-1") + self.assertEqual(expect, result, + "using quote_plus(): %r != %r" % (expect, result)) + # Errors test for quote_plus + given = "ab\u6f22\u5b57 cd" + expect = "ab%3F%3F+cd" + result = urllib.parse.quote_plus(given, encoding="latin-1", + errors="replace") + self.assertEqual(expect, result, + "using quote_plus(): %r != %r" % (expect, result)) + class UnquotingTests(unittest.TestCase): """Tests for unquote() and unquote_plus() diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 903368329b..726e85fb89 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -488,7 +488,7 @@ def quote_plus(string, safe='', encoding=None, errors=None): space = ' ' else: space = b' ' - string = quote(string, safe + space) + string = quote(string, safe + space, encoding, errors) return string.replace(' ', '+') def quote_from_bytes(bs, safe='/'): diff --git a/Misc/NEWS b/Misc/NEWS index 91b5dfcf4c..e8e2e55087 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -34,6 +34,9 @@ Core and Builtins Library ------- +- Issue #6118: urllib.parse.quote_plus ignored the encoding and errors + arguments for strings with a space in them. + - In unittest, using a skipping decorator on a class is now equivalent to skipping every test on the class. The ClassTestSuite class has been removed.