I'm not sure about the changes in this section, they seem to be more complex than needed.  In fact, looking at the old code in Classic I think it may be that it was already modified incorrectly before your changes.  Please take a look at the old code and see what you think.  I think that something like this may take care of it:

```
                excludes = six.text_type()
                if not isinstance(field._excludeChars, six.text_type):
                    excludes += field._excludeChars.decode(self._defaultEncoding)
                if not isinstance(field._ctrl_constraints, six.text_type):
                    excludes += field._ctrl_constraints.decode(self._defaultEncoding)
```