<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY

Ansible can't parse unicode correctly, when reading template

##### COMPONENT NAME

template

##### ANSIBLE VERSION

```
ansible 2.9.2
  config file = None
  configured module search path = [u'/home/home/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
```

##### OS / ENVIRONMENT
 
CentOS Linux release 7.7.1908 (Core)

##### STEPS TO REPRODUCE

vars.yml

```yaml
some_var: "test"
```

templates/example.json.j2

```json
{
  "something": "test",
  "this-breaks-key": "This breaks the whole file, because of: ü§",
  "another-key": "{{ some_var }}"
}
```

```yaml
- hosts: test
  connection: local
  vars:
    reference: "{{ lookup('template', 'templates/example.json.j2') }}"
    delta: {}
  tasks:
    - name: Test | Get configuration changes
      set_fact:
        delta: "{{ delta | combine({item.key: item.value}, recursive=true) }}"
      loop: "{{ reference | dict2items }}"
```

##### EXPECTED RESULTS

The valid json file should be correctly parsed and unicode should not be a problem in 2020.

Everything works just as expected, when `unicode chars` are removed.

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->

```json
{"msg": "dict2items requires a dictionary, got <type 'unicode'> instead."}
```

The underlying exception that causes this behavior:

```
Traceback (most recent call last):
  File "/Users/matt/projects/ansibledev/ansible/lib/ansible/template/safe_eval.py", line 142, in safe_eval
    compiled = compile(parsed_tree, expr, 'eval')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 87-88: ordinal not in range(128)
```
"""Make sure that a string is a text string
    :arg obj: An object to make sure is a text string.  In most cases this
        will be either a text string or a byte string.  However, with
        ``nonstring='simplerepr'``, this can be used as a traceback-free
        version of ``str(obj)``.
    :kwarg encoding: The encoding to use to transform from a byte string to
        a text string.  Defaults to using 'utf-8'.
    :kwarg errors: The error handler to use if the byte string is not
        decodable using the specified encoding.  Any valid `codecs error
        handler <https://docs.python.org/2/library/codecs.html#codec-base-classes>`_
        may be specified.   We support three additional error strategies
        specifically aimed at helping people to port code:
            :surrogate_or_strict: Will use surrogateescape if it is a valid
                handler, otherwise it will use strict
            :surrogate_or_replace: Will use surrogateescape if it is a valid
                handler, otherwise it will use replace.
            :surrogate_then_replace: Does the same as surrogate_or_replace but
                `was added for symmetry with the error handlers in
                :func:`ansible.module_utils._text.to_bytes` (Added in Ansible 2.3)
        Because surrogateescape was added in Python3 this usually means that
        Python3 will use `surrogateescape` and Python2 will use the fallback
        error handler. Note that the code checks for surrogateescape when the
        module is imported.  If you have a backport of `surrogateescape` for
        python2, be sure to register the error handler prior to importing this
        module.
        The default until Ansible-2.2 was `surrogate_or_replace`
        In Ansible-2.3 this defaults to `surrogate_then_replace` for symmetry
        with :func:`ansible.module_utils._text.to_bytes` .
    :kwarg nonstring: The strategy to use if a nonstring is specified in