From 2bd9877b7df91a482962a07d2cd610580a4aabc1 Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 21 Apr 2022 08:31:40 +0200 Subject: [PATCH] [incrParse] Encode Unicode characters in command output if stdout doesn't support Unicode In verbose mode incrparse/test_util.py outputs the commands it executes to stdout. Since these commands contain Unicode emojis, it fails if stdout doesn't support Unicode. In these cases, encode the Unicode characters to their escape sequence. rdar://92047111 --- utils/incrparse/test_util.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/utils/incrparse/test_util.py b/utils/incrparse/test_util.py index 654887b12efde..fce7532251193 100755 --- a/utils/incrparse/test_util.py +++ b/utils/incrparse/test_util.py @@ -23,7 +23,12 @@ def escapeCmdArg(arg): def run_command(cmd): if sys.version_info[0] < 3: cmd = list(map(lambda s: s.encode('utf-8'), cmd)) - print(' '.join([escapeCmdArg(arg) for arg in cmd])) + cmdStr = ' '.join([escapeCmdArg(arg) for arg in cmd]) + if not sys.stdout.encoding.lower().startswith('utf'): + # stdout doesn't support Unicode characters, encode them into an escape + # sequence + cmdStr = cmdStr.encode('utf-8') + print(cmdStr) if sys.version_info[0] < 3 or platform.system() == 'Windows': return subprocess.check_output(cmd, stderr=subprocess.STDOUT) else: