<!--- 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)
```
:kwarg errors: The error handler to use if the text string is not
        encodable using the specified encoding.  Any valid `codecs error
        handler <https://docs.python.org/2/library/codecs.html#codec-base-classes>`_
        may be specified. There are three additional error strategies
        specifically aimed at helping people to port code.  The first two are:
            :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``.
        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 last error handler is:
            :surrogate_then_replace: Will use ``surrogateescape`` if it is a valid
                handler.  If encoding with ``surrogateescape`` would traceback,
                surrogates are first replaced with a replacement characters
                and then the string is encoded using ``replace`` (which replaces
                the rest of the nonencodable bytes).  If ``surrogateescape`` is
                not present it will simply use ``replace``.  (Added in Ansible 2.3)
                This strategy is designed to never traceback when it attempts
                to encode a string.
        The default until Ansible-2.2 was ``surrogate_or_replace``
        From Ansible-2.3 onwards, the default is ``surrogate_then_replace``.
    :kwarg nonstring: The strategy to use if a nonstring is specified in
        ``obj``.  Default is 'simplerepr'.  Valid values are:
        :simplerepr: The default.  This takes the ``str`` of the object and
            then returns the bytes version of that string.