summaryrefslogtreecommitdiffstats
path: root/Lib/locale.py
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2002-11-03 17:20:12 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2002-11-03 17:20:12 (GMT)
commitf0a4668e6f23da6e60c58933f31250cabc7213d6 (patch)
tree9067bb0eccb339e9eb67b74f37c0d5541b1251e3 /Lib/locale.py
parentcf57e50989716143569473d5fd6d5a3a1c8cfea7 (diff)
downloadcpython-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.py41
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