]> granicus.if.org Git - python/commitdiff
Issue #20086: Restored the use of locale-independing mapping instead of
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 17 Jan 2014 07:27:56 +0000 (09:27 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Fri, 17 Jan 2014 07:27:56 +0000 (09:27 +0200)
locale-depending str.lower() in locale.normalize().

Lib/locale.py
Lib/test/test_locale.py
Misc/NEWS

index 96af6ddc3c72542a0cf8c63fe522ce6aa1c9bfcc..25dccaf22f5a4ef3ca57d4d29df6c14a5e5ae4f4 100644 (file)
@@ -379,7 +379,7 @@ def normalize(localename):
     # Normalize the locale name and extract the encoding and modifier
     if isinstance(localename, _unicode):
         localename = localename.encode('ascii')
-    code = localename.lower()
+    code = localename.translate(_ascii_lower_map)
     if ':' in code:
         # ':' is sometimes used as encoding delimiter.
         code = code.replace(':', '.')
@@ -414,7 +414,7 @@ def normalize(localename):
             #print('lookup without modifier succeeded')
             if '@' not in code:
                 return code + '@' + modifier
-            if code.split('@', 1)[1].lower() == modifier:
+            if code.split('@', 1)[1].translate(_ascii_lower_map) == modifier:
                 return code
         #print('second lookup failed')
 
@@ -439,7 +439,7 @@ def normalize(localename):
                 if '@' not in code:
                     return _replace_encoding(code, encoding) + '@' + modifier
                 code, defmod = code.split('@', 1)
-                if defmod.lower() == modifier:
+                if defmod.translate(_ascii_lower_map) == modifier:
                     return _replace_encoding(code, encoding) + '@' + defmod
 
     return localename
index d955fa86e4a3578462330edc89f86cb2bb4036a9..cd4d46dc586b4369b0570c6b1434405a54a7a967 100644 (file)
@@ -471,9 +471,13 @@ class TestMiscellaneous(unittest.TestCase):
         # Issue #1813: setting and getting the locale under a Turkish locale
         oldlocale = locale.getlocale()
         self.addCleanup(locale.setlocale, locale.LC_CTYPE, oldlocale)
-        try:
-            locale.setlocale(locale.LC_CTYPE, 'tr_TR')
-        except locale.Error:
+        for loc in ('tr_TR', 'tr_TR.UTF-8', 'tr_TR.ISO8859-9'):
+            try:
+                locale.setlocale(locale.LC_CTYPE, loc)
+                break
+            except locale.Error:
+                continue
+        else:
             # Unsupported locale on this system
             self.skipTest('test needs Turkish locale')
         loc = locale.getlocale()
@@ -482,7 +486,6 @@ class TestMiscellaneous(unittest.TestCase):
         except Exception as e:
             self.fail("Failed to set locale %r (default locale is %r): %r" %
                       (loc, oldlocale, e))
-        print("set locale %r (default locale is %r)" % (loc, oldlocale))
         self.assertEqual(loc, locale.getlocale())
 
     def test_normalize_issue12752(self):
index 884301ab3beb6d748e0f0530fbdcfef7496d1630..fcdcdcd10b72a44bd411fae6add51c369f925ef1 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -35,6 +35,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #20086: Restored the use of locale-independing mapping instead of
+  locale-depending str.lower() in locale.normalize().
+
 - Issue #20246: Fix buffer overflow in socket.recvfrom_into.
 
 - Issue #19082: Working SimpleXMLRPCServer and xmlrpclib examples, both in