[squeak-dev] Re: [ANN] WebClient and WebServer 1.0 for Squeak

Hannes Hirzel hannes.hirzel at gmail.com
Mon May 10 15:01:53 UTC 2010


The test case made simpler

WebClient httpPut: host, '/notes/test7' content:
'{"content":"\uC3\uA4s"}' type: 'text/plain'.

gives back as answer: '{"error":"bad_request","reason":"invalid UTF-8 JSON"}
'

whereas

WebClient httpPut: host, '/notes/test8' content: '{"content":"abc"}'
type: 'text/plain'.

gives back
'{"ok":true,"id":"test8","rev":"1-f40e52919735ae6775af3d388361b3da"}
'

--Hannes

On 5/10/10, Hannes Hirzel <hannes.hirzel at gmail.com> wrote:
> Hello
>
> On 5/7/10, Andreas Raab <andreas.raab at gmx.de> wrote:
>> On 5/6/2010 3:32 PM, christophe.jalady at free.fr wrote:
>>> But it looks like there is a bug with the encoding !
>>
>> The behavior you are seeing is intentional. WebClient doesn't interpret
>> the content of a response. It simply gives you the bytes that you can
>> deal with in any way you see fit. That includes dealing with encodings.
>
>>> I have tried a quick test by replacing "ByteString" with "WideString" in
>>> WebResponse>>content without success.
>>
>> Yes, you need to decode the input. You can for example use the method
>> #utf8ToSqueak to decode the string into UTF-8.
>
>
> I have a similar problem, I want to post a document to a couchDB
> instance. Without German umlauts it works fine but if I add them I get
> an error message.
>
> host :='http://localhost:5984'.
> r := WriteStream on: (String new: 1000).
> d := Dictionary new. d at: 'content' put: 'äs' squeakToUtf8.
> (JsonObject newFrom: d) jsonWriteOn: r.
> WebClient httpPut: host, '/notes/test5' content:  r contents  type:
> 'text/plain;charset=utf-8'.
>
> The error message of the WebResponse is
> '{"error":"bad_request","reason":"invalid UTF-8 JSON"}
> '
>
> The same thing happens if I omit #squeakToUtf8
>
> If I inspect
>    r contents
> I get
>   '{"content":"\uC3\uA4s"}'
>
>
> Contrariwise if I post
>
>     host :='http://localhost:5984'.
>     r := WriteStream on: (String new: 1000).
>     d := Dictionary new. d at: 'content' put: 'abc' squeakToUtf8.
>     (JsonObject newFrom: d) jsonWriteOn: r.
>     WebClient httpPut: host, '/notes/test5' content:  r contents
> type: 'text/plain;charset=utf-8'.
>
> I get as answer
>     '{"ok":true,"id":"test5","rev":"1-f40e52919735ae6775af3d388361b3da"}
>     '
>
> How is this conversion supposed to be done?
>
> Hints and comments are appreciated.
>
> --Hannes
>



More information about the Squeak-dev mailing list