mirror of
https://github.com/python/cpython.git
synced 2025-08-31 22:18:28 +00:00
Add getpreferredencoding. Support @euro modifiers. Fixes #554676.
The @euro part is backported to 2.2.3.
This commit is contained in:
parent
cf57e50989
commit
f0a4668e6f
4 changed files with 59 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue