diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2002-11-03 17:20:12 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2002-11-03 17:20:12 (GMT) |
commit | f0a4668e6f23da6e60c58933f31250cabc7213d6 (patch) | |
tree | 9067bb0eccb339e9eb67b74f37c0d5541b1251e3 /Lib/locale.py | |
parent | cf57e50989716143569473d5fd6d5a3a1c8cfea7 (diff) | |
download | cpython-f0a4668e6f23da6e60c58933f31250cabc7213d6.zip cpython-f0a4668e6f23da6e60c58933f31250cabc7213d6.tar.gz cpython-f0a4668e6f23da6e60c58933f31250cabc7213d6.tar.bz2 |
Add getpreferredencoding. Support @euro modifiers. Fixes #554676.
The @euro part is backported to 2.2.3.
Diffstat (limited to 'Lib/locale.py')
-rw-r--r-- | Lib/locale.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Lib/locale.py b/Lib/locale.py index 9078eed..9ae981f 100644 --- a/Lib/locale.py +++ b/Lib/locale.py @@ -264,6 +264,15 @@ def _parse_localename(localename): """ code = normalize(localename) + if '@' in localename: + # Deal with locale modifiers + code, modifier = code.split('@') + if modifier == 'euro' and '.' not in code: + # Assume Latin-9 for @euro locales. This is bogus, + # since some systems may use other encodings for these + # locales. Also, we ignore other modifiers. + return code, 'iso-8859-15' + if '.' in code: return code.split('.')[:2] elif code == 'C': @@ -381,6 +390,38 @@ def resetlocale(category=LC_ALL): """ _setlocale(category, _build_localename(getdefaultlocale())) +if sys.platform in ('win32', 'darwin', 'mac'): + # On Win32, this will return the ANSI code page + # On the Mac, it should return the system encoding; + # it might return "ascii" instead + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using.""" + import _locale + return _locale.getdefaultlocale()[1] +else: + # On Unix, if CODESET is available, use that. + try: + CODESET + except NameError: + # Fall back to parsing environment variables :-( + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using, + by looking at environment variables.""" + return getdefaultlocale()[1] + else: + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using, + according to the system configuration.""" + if do_setlocale: + oldloc = setlocale(LC_CTYPE) + setlocale(LC_CTYPE, "") + result = nl_langinfo(CODESET) + setlocale(LC_CTYPE, oldloc) + return result + else: + return nl_langinfo(CODESET) + + ### Database # # The following data was extracted from the locale.alias file which |