##### SUMMARY
Wide glyphs in task names cause the asterisks in the output to wrap around to the next line. My guess is that Ansible is treating characters that take up two spaces as one. Example: 🚀 and 汉字.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
ansible

##### ANSIBLE VERSION
```
ansible 2.8.5
  config file = /home/major/git/cki-project-experimental/aws-deployment/ansible.cfg
  configured module search path = ['/home/major/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/major/.pyenv/versions/3.7.4/envs/venv-3.7.4/lib/python3.7/site-packages/ansible
  executable location = /home/major/.pyenv/versions/venv-3.7.4/bin/ansible
  python version = 3.7.4 (default, Sep 20 2019, 07:35:42) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
```

##### CONFIGURATION
```
(no config changes from defaults)
```

##### OS / ENVIRONMENT
Fedora 30 with Python 3.7.4

##### STEPS TO REPRODUCE
I ran a playbook that contains emojis:

```yaml
---

- hosts: localhost
  gather_facts: no

  tasks:

    - name: "🚀 This name has emoji"
      debug:
        msg: "🚀 is a fun emoji"

    - name: "汉字 This name has Chinese characters"
      debug:
        msg: "汉字 means 'Chinese character'"
```

##### EXPECTED RESULTS

I expected the asterisks to be the same length for all lines without wrapping.


##### ACTUAL RESULTS
The output is:

```
PLAY [deployer] *****************************************************************************

TASK [🚀 This name has emoji] ****************************************************************
Thursday 03 October 2019  11:03:41 -0500 (0:00:00.025)       0:00:00.025 ****** 
ok: [localhost] => 
  msg: 🚀 is a fun emoji

TASK [汉字 This name has Chinese characters] **************************************************
Thursday 03 October 2019  11:03:41 -0500 (0:00:00.009)       0:00:00.035 ****** 
ok: [localhost] => 
  msg: 汉字 means 'Chinese character'

PLAY RECAP **********************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
```
except AnsibleParserError as e:
        display.error(to_text(e), wrap_text=False)
        exit_code = 4
    except AnsibleError as e:
        display.error(to_text(e), wrap_text=False)
        exit_code = 1
    except KeyboardInterrupt:
        display.error("User interrupted execution")
        exit_code = 99
    except Exception as e:
        if C.DEFAULT_DEBUG:
            
            
            raise
        have_cli_options = bool(context.CLIARGS)
        display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
        if not have_cli_options or have_cli_options and context.CLIARGS['verbosity'] > 2:
            log_only = False
            if hasattr(e, 'orig_exc'):
                display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
                why = to_text(e.orig_exc)
                if to_text(e) != why:
                    display.vvv('\noriginal msg: %s' % why)
        else:
            display.display("to see the full traceback, use -vvv")
            log_only = True
        display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
        exit_code = 250
    sys.exit(exit_code)