35 lines
725 B
Python
35 lines
725 B
Python
from __future__ import absolute_import
|
|
|
|
import codecs
|
|
import locale
|
|
import sys
|
|
|
|
from .context import PY3
|
|
|
|
|
|
ENCODING = locale.getpreferredencoding()
|
|
|
|
|
|
def to_byte(val):
|
|
unicode_type = str if PY3 else unicode
|
|
if isinstance(val, unicode_type):
|
|
try:
|
|
return val.encode(ENCODING)
|
|
except UnicodeEncodeError:
|
|
if PY3:
|
|
return codecs.escape_decode(val)[0]
|
|
else:
|
|
return val.encode("unicode-escape").decode("string-escape")
|
|
|
|
return val
|
|
|
|
|
|
def to_unicode(val):
|
|
if isinstance(val, bytes):
|
|
try:
|
|
return val.decode(ENCODING)
|
|
except UnicodeDecodeError:
|
|
return val.decode("unicode-escape")
|
|
|
|
return val
|