### Summary

Add preflight checks to `lib/ansible/cli/__init__.py` for both the local locale and the fsencoding to ensure they are `UTF-8`, and abort when they are not.

We implicitly require this now, but have never strictly enforced it. Due to using `pathlib` in more places, to avoid undefined behavior in our codebase, due to the utf-8 expectation, check this early and fail fast.

### Issue Type

Feature Idea

### Component Name
```
lib/ansible/cli/__init__.py
```
### Additional Information

We may also need to evaluate the `C` locale.  I know some users are running ansible from devices with only the `C` locale.

### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
''' used to print out a deprecation message.'''
        msg = msg.strip()
        if msg and msg[-1] not in ['!', '?', '.']:
            msg += '.'
        if collection_name == 'ansible.builtin':
            collection_name = 'ansible-core'
        if removed:
            header = '[DEPRECATED]: {0}'.format(msg)
            removal_fragment = 'This feature was removed'
            help_text = 'Please update your playbooks.'
        else:
            header = '[DEPRECATION WARNING]: {0}'.format(msg)
            removal_fragment = 'This feature will be removed'
            
            help_text = 'Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.'
        if collection_name:
            from_fragment = 'from {0}'.format(collection_name)
        else:
            from_fragment = ''
        if date:
            when = 'in a release after {0}.'.format(date)
        elif version:
            when = 'in version {0}.'.format(version)
        else:
            when = 'in a future release.'
        message_text = ' '.join(f for f in [header, removal_fragment, from_fragment, when, help_text] if f)
        return message_text
    def deprecated(self, msg, version=None, removed=False, date=None, collection_name=None):