Files
Iristyle a000ce8acc feat(ST2.UtilPackages): bump up all packages
- Refresh PackageCache with latest versions of everything
2013-09-16 22:35:46 -04:00

50 lines
1.2 KiB
Python

import os
import locale
import sys
# Sublime Text on OS X does not seem to report the correct encoding
# so we hard-code that to UTF-8
_encoding = 'utf-8' if sys.platform == 'darwin' else locale.getpreferredencoding()
_fallback_encodings = ['utf-8', 'cp1252']
def unicode_from_os(e):
"""
This is needed as some exceptions coming from the OS are
already encoded and so just calling unicode(e) will result
in an UnicodeDecodeError as the string isn't in ascii form.
:param e:
The exception to get the value of
:return:
The unicode version of the exception message
"""
if sys.version_info >= (3,):
return str(e)
try:
if isinstance(e, Exception):
e = e.message
if isinstance(e, unicode):
return e
if isinstance(e, int):
e = str(e)
return unicode(e, _encoding)
# If the "correct" encoding did not work, try some defaults, and then just
# obliterate characters that we can't seen to decode properly
except UnicodeDecodeError:
for encoding in _fallback_encodings:
try:
return unicode(e, encoding, errors='strict')
except:
pass
return unicode(e, errors='replace')