diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index b68a36b9c65..ad1d43f86ca 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -1457,7 +1457,12 @@ class AnsibleModule(object): # in reporting later, which strips out things like # passwords from the args list if isinstance(args, basestring): - to_clean_args = shlex.split(args.encode('utf-8')) + if isinstance(args, unicode): + b_args = args.encode('utf-8') + else: + b_args = args + to_clean_args = shlex.split(b_args) + del b_args else: to_clean_args = args diff --git a/test/integration/unicode.yml b/test/integration/unicode.yml index b04d760182c..1044c252705 100644 --- a/test/integration/unicode.yml +++ b/test/integration/unicode.yml @@ -41,6 +41,15 @@ - name: 'A task with unicode host vars' debug: var=unicode_host_var + - name: 'A task with unicode shell parameters' + shell: echo '¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö ×' + register: output + + - name: 'Assert that the unicode was echoed' + assert: + that: + - "'¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö ×' in output.stdout_lines" + - name: 'A play for hosts in group: ĪīĬĭ' hosts: 'ĪīĬĭ' gather_facts: true