Skip to content

Commit

Permalink
Fixed getting default encoding in get_system_username
Browse files Browse the repository at this point in the history
Refs #19933.
  • Loading branch information
claudep committed Mar 2, 2013
1 parent 2172270 commit 8e8c9b9
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
6 changes: 2 additions & 4 deletions django/contrib/auth/management/__init__.py
Expand Up @@ -12,6 +12,7 @@
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

Expand Down Expand Up @@ -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 ''
Expand Down
22 changes: 14 additions & 8 deletions django/utils/encoding.py
Expand Up @@ -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()

0 comments on commit 8e8c9b9

Please sign in to comment.