
I can only imagine how difficult can it be to do such a conversion in a project like Twisted or Django where the I/O plays a fundamental role.
For Django, you don't need to imagine, but can look at the actual changes: http://bitbucket.org/loewis/django-3k/
The choice of forcing the user to use Unicode and "think in Unicode" was a very brave one, and I'm sure it's for the better, but not everyone wants to deal with that because Unicode is hard to swallow. The majority of people prefer to stay with bytes and eventually learn and introduce Unicode only when that is actually needed.
It's not really an issue with "Unicode", but rather with "characters". Surprisingly, most people don't grasp the notion of "abstract character". This is similar to not grasping the notion of "abstract integral number", which most programmers master over time (although my students typically need a year or more to get the difference between "decimal number", "two's complement", and "abstract integer"; the difference between "character string" and "number" is easier (*)). For numbers, programmers are forced to accept the abstraction. For character strings, they apparently resist much more. Regards, Martin (*) An anecdotal dialog may read like this Teacher: "How are numbers represented in Python?" Student: "In decimal." T: "How so?" S: "I can do x = 47 and it is decimal. I can then do print x and get "47". See?"