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