The difficult engineering problems in the world aren't greenfield engineering.
The idea of data being encoded should be an extremely high level idea, with foundations that are supported by the internal libraries and maybe even compiler.
I feel that golang has a much more data-structure friendly view of Unicode.
* The ancient paradigm of bytes remains
* Strings are immutable sequences of bytes; but are trivial to cast back and forth.
* 'runes' (distinct Unicode code points) also exist
However to actually validate or do anything fancy to a Unicode sequence a programmer would need libraries from https://godoc.org/golang.org/x/text which shows how truly complex /proper/ handling of Unicode data is; instead of just the simple copy / append / search (is this inside of / a match to it) operations that make up 99% of my handling of Unicode data.But I agree, making unicode part of the language is very dumb. I just wish they would give up as it has never been good.
The best in-memory representation of Unicode is UTF-8. No alignment issues, ingest "decode" is mere validation and output "encode" step is a no-op. Space requirements are favorable to common computer language syntaxes. Byte-wise lexical sort matches code point-wise lexical sort.
However, since "narrow builds" of Python 2 already used UTF-16 which allowed for things like bridging strings with Cocoa, Python would have done well to stick to UTF-16 and get rid of the "wide builds".
Not having both "narrow" (UTF-16, Python 2 on Mac) and "wide" (UTF-32, Python 2 on Debian) is an improvement, though.
I seriously cannot tell if this is a joke or not.
And if you're going to port, it's not a question 2 vs 3, it's a question of 3 versus many other languages, chiefly Go.
The writing is on the wall for py2 at Google, and in some ways it has been for years.