diff --git a/jc/cli.py b/jc/cli.py index a05e6e5a..976ceabb 100644 --- a/jc/cli.py +++ b/jc/cli.py @@ -4,7 +4,6 @@ JC cli module import sys import os -import locale import textwrap import signal import shlex @@ -31,13 +30,6 @@ except Exception: JC_ERROR_EXIT = 100 -try: - UTF_8_SUPPORT = bool(locale.getlocale()[1] == 'UTF-8') -except Exception: - UTF_8_SUPPORT = False - -CPR = '©' if UTF_8_SUPPORT else '(c)' - class info(): version = __version__ @@ -45,7 +37,7 @@ class info(): author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' website = 'https://github.com/kellyjonbrazil/jc' - copyright = f'{CPR} 2019-2022 Kelly Brazil' + copyright = f'© 2019-2022 Kelly Brazil' license = 'MIT License' @@ -92,6 +84,16 @@ if PYGMENTS_INSTALLED: } +def asciify(string): + """ + Return a string downgraded from Unicode to ASCII with some simple + conversions. + """ + string = string.replace('©', '(c)') + string = ascii(string) + return string.replace(r'\n', '\n') + + def set_env_colors(env_colors=None): """ Return a dictionary to be used in Pygments custom style class. @@ -277,7 +279,6 @@ def json_out(data, pretty=False, env_colors=None, mono=False, piped_out=False): """ separators = (',', ':') indent = None - ascii = False if UTF_8_SUPPORT else True if pretty: separators = None @@ -288,10 +289,23 @@ def json_out(data, pretty=False, env_colors=None, mono=False, piped_out=False): class JcStyle(Style): styles = set_env_colors(env_colors) - return str(highlight(json.dumps(data, indent=indent, separators=separators, ensure_ascii=ascii), - JsonLexer(), Terminal256Formatter(style=JcStyle))[0:-1]) + try: + return str(highlight(json.dumps(data, + indent=indent, + separators=separators, + ensure_ascii=False), + JsonLexer(), Terminal256Formatter(style=JcStyle))[0:-1]) + except UnicodeEncodeError: + return str(highlight(json.dumps(data, + indent=indent, + separators=separators, + ensure_ascii=True), + JsonLexer(), Terminal256Formatter(style=JcStyle))[0:-1]) - return json.dumps(data, indent=indent, separators=separators, ensure_ascii=ascii) + try: + return json.dumps(data, indent=indent, separators=separators, ensure_ascii=False) + except UnicodeEncodeError: + return json.dumps(data, indent=indent, separators=separators, ensure_ascii=True) def magic_parser(args): @@ -437,11 +451,17 @@ def main(): sys.exit(0) if help_me: - print(help_doc(sys.argv)) + try: + print(help_doc(sys.argv)) + except UnicodeEncodeError: + print(asciify(help_doc(sys.argv))) sys.exit(0) if version_info: - print(versiontext()) + try: + print(versiontext()) + except UnicodeEncodeError: + print(asciify(versiontext())) sys.exit(0) # if magic syntax used, try to run the command and error if it's not found, etc.