summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2013-11-23 17:33:49 -0500
committerJason R. Coombs <jaraco@jaraco.com>2013-11-23 17:33:49 -0500
commite9926a4c6a097feb76d5b5ec63fb681f2ab4a813 (patch)
tree255b5ab9ead2ccd223bf911c6628fd4adb4b2cff
parent63f856f5797afb3497818820f038c00ed10c0518 (diff)
parentcc90c5093d272397f08e33e4e75bf762d419df27 (diff)
downloadpython-setuptools-git-e9926a4c6a097feb76d5b5ec63fb681f2ab4a813.tar.gz
Merged in philip_thiem/setuptools (pull request #26)
SVN Encoding Issues
-rw-r--r--setuptools/svn_utils.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/setuptools/svn_utils.py b/setuptools/svn_utils.py
index 224d11ea..0d65bd30 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,34 @@ 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
+
+ is_osx = sys.platform == "darwin"
+ if not encoding:
+ return ["US-ASCII", "utf-8"][is_osx]
+ elif encoding.startswith("mac-") and is_osx:
+ #certain versions of python would return mac-roman as default
+ #OSX as a left over of earlier mac versions.
+ return "utf-8"
+ else:
+ return encoding
+
+_console_encoding = determine_console_encoding()
def decode_as_string(text, encoding=None):
"""
@@ -87,7 +116,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)