Fixed getting default encoding in get_system_username

Refs #19933.
This commit is contained in:
Claude Paroz 2013-03-02 22:41:08 +01:00
parent 21722702c8
commit 8e8c9b908a
2 changed files with 16 additions and 12 deletions

View File

@ -12,6 +12,7 @@ from django.core import exceptions
from django.core.management.base import CommandError from django.core.management.base import CommandError
from django.db import DEFAULT_DB_ALIAS, router from django.db import DEFAULT_DB_ALIAS, router
from django.db.models import get_models, signals from django.db.models import get_models, signals
from django.utils.encoding import DEFAULT_LOCALE_ENCODING
from django.utils import six from django.utils import six
from django.utils.six.moves import input from django.utils.six.moves import input
@ -133,11 +134,8 @@ def get_system_username():
# (a very restricted chroot environment, for example). # (a very restricted chroot environment, for example).
return '' return ''
if not six.PY3: if not six.PY3:
default_locale = locale.getdefaultlocale()[1]
if not default_locale:
return ''
try: try:
result = result.decode(default_locale) result = result.decode(DEFAULT_LOCALE_ENCODING)
except UnicodeDecodeError: except UnicodeDecodeError:
# UnicodeDecodeError - preventive treatment for non-latin Windows. # UnicodeDecodeError - preventive treatment for non-latin Windows.
return '' return ''

View File

@ -236,11 +236,17 @@ def filepath_to_uri(path):
# some flexibility for hardcoding separators. # some flexibility for hardcoding separators.
return quote(force_bytes(path.replace("\\", "/")), safe=b"/~!*()'") return quote(force_bytes(path.replace("\\", "/")), safe=b"/~!*()'")
# The encoding of the default system locale but falls back to the def get_system_encoding():
# given fallback encoding if the encoding is unsupported by python or could """
# not be determined. See tickets #10335 and #5846 The encoding of the default system locale but falls back to the given
try: fallback encoding if the encoding is unsupported by python or could
DEFAULT_LOCALE_ENCODING = locale.getdefaultlocale()[1] or 'ascii' not be determined. See tickets #10335 and #5846
codecs.lookup(DEFAULT_LOCALE_ENCODING) """
except: try:
DEFAULT_LOCALE_ENCODING = 'ascii' encoding = locale.getdefaultlocale()[1] or 'ascii'
codecs.lookup(encoding)
except Exception:
encoding = 'ascii'
return encoding
DEFAULT_LOCALE_ENCODING = get_system_encoding()