summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2013-03-02 22:41:08 +0100
committerClaude Paroz <claude@2xlibre.net>2013-03-02 22:41:08 +0100
commit8e8c9b908a0fe0d2437fcf3f0378eb2a62b81986 (patch)
tree82308ff28830d1da4fc08a83d335b315b362176a
parent21722702c8ca85895d245ce2967e7336a168585d (diff)
Fixed getting default encoding in get_system_username
Refs #19933.
-rw-r--r--django/contrib/auth/management/__init__.py6
-rw-r--r--django/utils/encoding.py22
2 files changed, 16 insertions, 12 deletions
diff --git a/django/contrib/auth/management/__init__.py b/django/contrib/auth/management/__init__.py
index 475dd255d4..685e50d498 100644
--- a/django/contrib/auth/management/__init__.py
+++ b/django/contrib/auth/management/__init__.py
@@ -12,6 +12,7 @@ from django.core import exceptions
from django.core.management.base import CommandError
from django.db import DEFAULT_DB_ALIAS, router
from django.db.models import get_models, signals
+from django.utils.encoding import DEFAULT_LOCALE_ENCODING
from django.utils import six
from django.utils.six.moves import input
@@ -133,11 +134,8 @@ def get_system_username():
# (a very restricted chroot environment, for example).
return ''
if not six.PY3:
- default_locale = locale.getdefaultlocale()[1]
- if not default_locale:
- return ''
try:
- result = result.decode(default_locale)
+ result = result.decode(DEFAULT_LOCALE_ENCODING)
except UnicodeDecodeError:
# UnicodeDecodeError - preventive treatment for non-latin Windows.
return ''
diff --git a/django/utils/encoding.py b/django/utils/encoding.py
index 607b48277a..efc4eccaf9 100644
--- a/django/utils/encoding.py
+++ b/django/utils/encoding.py
@@ -236,11 +236,17 @@ def filepath_to_uri(path):
# some flexibility for hardcoding separators.
return quote(force_bytes(path.replace("\\", "/")), safe=b"/~!*()'")
-# The encoding of the default system locale but falls back to the
-# given fallback encoding if the encoding is unsupported by python or could
-# not be determined. See tickets #10335 and #5846
-try:
- DEFAULT_LOCALE_ENCODING = locale.getdefaultlocale()[1] or 'ascii'
- codecs.lookup(DEFAULT_LOCALE_ENCODING)
-except:
- DEFAULT_LOCALE_ENCODING = 'ascii'
+def get_system_encoding():
+ """
+ The encoding of the default system locale but falls back to the given
+ fallback encoding if the encoding is unsupported by python or could
+ not be determined. See tickets #10335 and #5846
+ """
+ try:
+ encoding = locale.getdefaultlocale()[1] or 'ascii'
+ codecs.lookup(encoding)
+ except Exception:
+ encoding = 'ascii'
+ return encoding
+
+DEFAULT_LOCALE_ENCODING = get_system_encoding()