Java and C# Thrift assume that all strings should be UTF-8. A better approach would be:
- Give the readString and writeString protocol methods an encoding parameter, probably defaulting to UTF-8 for compatibility and convenience.
- Make generated struct readers and writers pass the argument to the protocol objects for each string.
- Allow a type annotation to override the default UTF-8 encoding.
- All other languages (except Python 3) should ignore the annotation, but it will serve as documentation for the application.