Process Unicode POST request


#1

Hi all,

I’m building a Rails controller which receives a POST request from an
external (Windows) application in order to communicate data. The
content of this POST request is encoded using Unicode. I know Ruby
doesn’t support Unicode, but I was wondering if there was a way to
still properly process such a request.

A simple POST request containing “a=b” as data, with Unicode
translates into:

=== start req ===
POST /post/batch HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Test/1.0
Host: 127.0.0.1:3000
Content-Length: 6
Cache-Control: no-cache
Cookie: _session_id=adb54e68cd96c44b4758209c8946c921

a.=.b.
=== end req ===

As you’d expect with Unicode encoding, “a” is now translated in
multiple bytes “a.”, just like “=” and “b”.

The YAML::dump(params) for this request is as follows:

— !map:HashWithIndifferentAccess
action: batch
controller: post
? !binary “YQA=\n”
: !binary |
AGI=

Which is obviously not what I’d expected.

To prove it does work without Unicode, the same POST request without
Unicode translates into:

=== start req ===
POST /post/batch HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Test/1.0
Host: 127.0.0.1:3000
Content-Length: 3
Cache-Control: no-cache

a=b
=== end req ===

The YAML::dump(params) for this request is as follows:

— !map:HashWithIndifferentAccess
a: b
action: batch
controller: post

So my question is: does anyone know how to make this work properly
with Unicode? The Rails version I’m using for this application is
1.2.2, so with $KCODE automatically set to UTF-8.

Thanks in advance,
Wouter