diff options
author | philip_thiem <ptthiem+bitbuket@gmail.com> | 2013-11-21 14:01:42 +0000 |
---|---|---|
committer | philip_thiem <ptthiem+bitbuket@gmail.com> | 2013-11-21 14:01:42 +0000 |
commit | f5cd7f424d0432cbca7d31648702249f2e76b087 (patch) | |
tree | d1cb5957f02d60e3f85c2cade0331435ffb7867c /setuptools/svn_utils.py | |
parent | 5219786775784fe0f8c3742e37e1889ad2c2307f (diff) | |
download | python-setuptools-git-f5cd7f424d0432cbca7d31648702249f2e76b087.tar.gz |
Made a more sophisticated encoding heuristic that runs at module load.
Diffstat (limited to 'setuptools/svn_utils.py')
-rw-r--r-- | setuptools/svn_utils.py | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/setuptools/svn_utils.py b/setuptools/svn_utils.py index 224d11ea..98a1ff2e 100644 --- a/setuptools/svn_utils.py +++ b/setuptools/svn_utils.py @@ -5,6 +5,7 @@ from distutils import log import xml.dom.pulldom
import shlex
import locale
+import codecs
import unicodedata
import warnings
from setuptools.compat import unicode, bytes
@@ -72,6 +73,32 @@ def joinpath(prefix, *suffix): return os.path.join(*suffix)
return os.path.join(prefix, *suffix)
+def determine_console_encoding():
+ try:
+ #try for the preferred encoding
+ encoding = locale.getpreferredencoding()
+
+ #see if the locale.getdefaultlocale returns null
+ #some versions of python\platforms return US-ASCII
+ #when it cannot determine an encoding
+ if not encoding or encoding == "US-ASCII":
+ encoding = locale.getdefaultlocale()[1]
+
+ if encoding:
+ codecs.lookup(encoding) # make sure a lookup error is not made
+
+ except locale.Error, LookupError:
+ encoding = None
+
+ #olders pythons defaulted to this
+ if not encoding:
+ return "US-ASCII"
+ elif encoding.startswith("mac-") and os.platform == "darwin":
+ return "utf-8"
+ else:
+ return encoding
+
+_console_encoding = determine_console_encoding()
def decode_as_string(text, encoding=None):
"""
@@ -87,7 +114,7 @@ def decode_as_string(text, encoding=None): #text should be a byte string
if encoding is None:
- encoding = locale.getpreferredencoding()
+ encoding = _console_encoding
if not isinstance(text, unicode):
text = text.decode(encoding)
|