C and C++ are so widely used that transitions like this are made not at the language level but at the level of platforms or other communities. Some parts of the C&#x2F;C++ world made this transition relatively seamlessly, while others got caught in the same traps as Python.<p>The key is UTF-8: UTF-8 is a superset of 7-bit ASCII, so as long as you only convert to&#x2F;from other encodings at the boundaries of your system, unicode can be introduced to the internal components in a gradual and mostly-compatible way. You only get in trouble when you decide that you need separate &quot;byte string&quot; and &quot;character string&quot; data types (which is generally a mistake: due to the existince of combining characters, graphemes are variable-width even if you&#x27;re using strings composed of unicode code points, so you don&#x27;t gain much by using UCS-4 character strings instead of UTF-8 byte strings).<p>My theory is that the python 3 transition would have gone <i>much</i> smoother and still accomplished its goals if they had left the implicit str&#x2F;bytes conversion in place but just made it use UTF-8 instead of ASCII (although in environments like Windows where UTF-16 is important this may not have worked out as well).