mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
import sys
|
|
import locale
|
|
|
|
is_py3 = (sys.version_info.major >= 3)
|
|
|
|
# retrieve info about current encoding output
|
|
# Provite a warning if sys.stdout.encoding do not match GetConsoleOutputCP() ?
|
|
|
|
|
|
|
|
if is_py3:
|
|
def str_from_ascii_function(s):
|
|
return s.decode("ascii")
|
|
|
|
int_types = int
|
|
basestring = str
|
|
anybuff = (str, bytes)
|
|
|
|
def raw_encode(s):
|
|
if isinstance(s, str):
|
|
return s.encode("latin1")
|
|
return s
|
|
|
|
def raw_decode(s):
|
|
if isinstance(s, bytes):
|
|
return s.decode("latin1")
|
|
return s
|
|
|
|
# No encoding of unicode repr if we target a TTY
|
|
# Python3 handle unicode natively in string and console output
|
|
|
|
if sys.stdout.isatty():
|
|
def urepr_encode(s):
|
|
return s
|
|
else: # Not a TTY (seen in github CI) : if no explict encoding on stdout : use the locale to encode it the best we can to prevent print error
|
|
repr_encoding = sys.stdout.encoding or locale.getpreferredencoding()
|
|
|
|
def urepr_encode(s):
|
|
return s.encode(repr_encoding, "backslashreplace").decode()
|
|
|
|
else: # py2.7
|
|
def str_from_ascii_function(s):
|
|
return s
|
|
|
|
int_types = (int, long)
|
|
basestring = basestring
|
|
anybuff = basestring
|
|
|
|
def raw_encode(s):
|
|
if isinstance(s, unicode):
|
|
return s.encode("latin1")
|
|
return s
|
|
|
|
def raw_decode(s):
|
|
# No unicode for now on py2
|
|
return s
|
|
|
|
# sys.stdout.encoding may be None if not a tty
|
|
# Use sys.stdout.isatty() ? in py2 we will never return unicode in anycase
|
|
repr_encoding = sys.stdout.encoding or locale.getpreferredencoding()
|
|
repr_encoding = "cp1252"
|
|
|
|
def urepr_encode(ustr):
|
|
# assert isinstance(s, unicode) # Make the check explicitly ?
|
|
return ustr.encode(repr_encoding, "backslashreplace") |