[Twisted-web] [Nevow] json serializer and strings

Manlio Perillo manlio_perillo at libero.it
Sun Sep 10 04:04:03 CDT 2006


Cory Dodt ha scritto:
> 
> 
> On 9/9/06, *Manlio Perillo* <manlio_perillo at libero.it
> <mailto:manlio_perillo at libero.it>> wrote:
> 
> 
>     >> There are some problems with this:
>     >>
>     >>    elif isinstance(obj, str):
>     >>        w('"')
>     >>        w(stringEncode(obj.decode("us-ascii"))
>     >>        w('"')
>     >> ?
>     >
>     > Yes.  What if it is not an ASCII string?
> 
>     Raise an arror?
>     Is this really a problem?
> 
> 
> 
> Yes.  Yes it is.  Javascript strings are unicode.  Therefore the
> implementation must be able to convert the encoded string (byte
> representation) into Unicode when it arrives.
> 
> In order to convert the parameter to unicode, the API has to know what
> encoding the original string was; or it must have it in Unicode form
> already.  If the API accepts 8-bit str objects, then it must guess at
> the encoding to produce a unicode object.  It will guess wrong very
> often, which leads to bugs.  Therefore, it does not accept 8-bit str
> objects.
> 

I don't agree, but that's not a problem; I just can decode the keywords
dictionary by myself (or use another library).

However you say:
"it does not accept 8-bit str objects".

Well, all I can say is that by doing obj.decode("us-ascii") we are
accepting 7-bit str objects!

If you like:

try:
  obj.decode("us-ascii")
except UnicodeDecodeError:
  raise ValueError("8-bit strings not supported")


This implementation is just a little more friendly since str objects are
the default in CPython:

 >>> def foo(**kwargs):
 >>>  print type(kwargs.keys()[0])

 >>> foo(a=1)
 <type 'str'>



Regards  Manlio Perillo



More information about the Twisted-web mailing list