[Twisted-Python] twisted.internet.abstract.FileDescription.write vs unicode
Jeff Bowden
jlb at houseofdistraction.com
Tue Jul 13 00:50:43 EDT 2004
Mary Gardiner wrote:
>On Mon, Jul 12, 2004, Jeff Bowden wrote:
>
>
>>Is there a good reason for
>>twisted.internet.abstract.FileDescription.write to require
>>isinstance(data, str) rather than also allowing isinstance(type, unicode)??
>>
>>
>
>This is one of those rare things, an FAQ that really is a "Frequently
>Asked Question" not a "Question We Wish You'd Ask".
>
>Unfortunately, I haven't actually added it to the FAQs yet :( See the
>discussion at
>http://www.twistedmatrix.com/users/roundup.twistd/twisted/issue617, in
>particular Glyph Lefkowitz's comment:
>
>
> "Q. Why doesn't {API X} accept both string objects and unicode
> objects? Isn't it better to use unicode so you can support
> internationalization?
>
> A. Unicode is for talking about strings of human-readable text.
> String objects can also be used for this purpose, and when they are,
> it is better to use unicode, you are correct. However, {API X} is
> dealing with raw data, probably coming from a network connection,
> and is using String objects as containers of sequences of bytes.
> Unicode has no way of representing sequences of bytes and streams of
> 'raw', unparsed data. The data has to be translated at some level
> *above* that, in order to get things like unicode character
> alignment correct.
>
> For more information and some idea of the complexity involved, read
> http://www.sidhe.org/~dan/blog/archives/000255.html and
> http://www.joelonsoftware.com/articles/Unicode.html"
>
>
Right, so I worked around this problem by calling .encode('utf8') in all
the places where strings go out (after making appropriate changes to the
content-encoding).
It wasn't that complicated but it was a PITA and it will be an ongoing
maintenance headache. It would be a lot nicer if the framework dealt
with it transparently.
FileDescriptor.write does seem like the wrong place to handle it even
though that's where the error message pops out. Apparently what's
needed is another layer on top of the http layer. Has anyone attempted
to write one?
More information about the Twisted-Python
mailing list