From e08496b62ddac29713a9fbc849fde5b9bb4f1121 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 Nov 2015 23:54:36 +0100 Subject: [PATCH] Closes #25742: locale.setlocale() now accepts a Unicode string for its second parameter. --- Lib/locale.py | 6 +++++- Lib/test/test_locale.py | 10 ++++++++++ Misc/NEWS | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Lib/locale.py b/Lib/locale.py index 15c53babcb6d..f547babf84b4 100644 --- a/Lib/locale.py +++ b/Lib/locale.py @@ -18,6 +18,10 @@ import re import operator import functools +# keep a copy of the builtin str type, because 'str' name is overriden +# in globals by a function below +_str = str + try: _unicode = unicode except NameError: @@ -573,7 +577,7 @@ def setlocale(category, locale=None): category may be given as one of the LC_* values. """ - if locale and type(locale) is not type(""): + if locale and not isinstance(locale, (_str, _unicode)): # convert to string locale = normalize(_build_localename(locale)) return _setlocale(category, locale) diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py index 719175bed850..140388a156f2 100644 --- a/Lib/test/test_locale.py +++ b/Lib/test/test_locale.py @@ -493,6 +493,16 @@ class TestMiscellaneous(unittest.TestCase): # longer accept unicode strings. self.assertEqual(locale.normalize(u'en_US'), 'en_US.ISO8859-1') + def test_setlocale_unicode(self): + old_loc = locale.getlocale(locale.LC_ALL) + try: + user_locale = locale.setlocale(locale.LC_ALL, '') + unicode_locale = user_locale.decode('utf-8') + user_locale2 = locale.setlocale(locale.LC_ALL, unicode_locale) + self.assertEqual(user_locale, user_locale2) + finally: + locale.setlocale(locale.LC_ALL, old_loc) + def test_main(): tests = [ diff --git a/Misc/NEWS b/Misc/NEWS index 8cbddff97edc..4a32e4727220 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -20,6 +20,9 @@ Core and Builtins Library ------- +- Issue #25742: :func:`locale.setlocale` now accepts a Unicode string for + its second parameter. + - Issue #10131: Fixed deep copying of minidom documents. Based on patch by Marian Ganisin. -- 2.47.3