librelist archives

« back to archive

[flask] Flask.request.args.get() and non-ascii characters

[flask] Flask.request.args.get() and non-ascii characters

From:
Eunjin Lee
Date:
2010-07-20 @ 09:24
Hi, everyone

I have a problem with using Flask.request.args.get() method.

When URL parameter's value contains any non-ascii character (like Korean '한글'),
Flask.request.args.get() method doesn't return valid values but blank
values (exactly <u''>)

For example URL like <http://test.com:3000/result/?res_cd=0000&res_msg=정상처리>

- request.args.get('res_cd', None) returns '0000' and
- request.args.get('res_msg', None) returns u'' (blank)

I tested this other browser and found different result in each browser
(IE, FF, GC)

- IE8 : request.args.get('res_msg', None) returns u''
- FF4 : request.args.get('res_msg', None) returns u''
- GC5 : request.args.get('res_msg', None) returns u'정상처리'

help, many thanks

Best regards,
EJ Lee

Re: [flask] Flask.request.args.get() and non-ascii characters

From:
Armin Ronacher
Date:
2010-07-20 @ 09:34
Hi,

On 7/20/10 10:24 AM, Eunjin Lee wrote:
> When URL parameter's value contains any non-ascii character (like Korean '한글'),
> Flask.request.args.get() method doesn't return valid values but blank
> values (exactly<u''>)
>
> For example URL like<http://test.com:3000/result/?res_cd=0000&res_msg=정상처리>
>
> - request.args.get('res_cd', None) returns '0000' and
> - request.args.get('res_msg', None) returns u'' (blank)
By default Flask assumes UTF-8 encoding for URLs.  If you don't have 
UTF-8 URLs, you will have to let flask know that:


from flask import Request, Flask

class KoreanRequest(Request):
     url_charset = 'euc-kr'

app = Flask(__name__)
app.request_class = KoreanRequest


Regards,
Armin

Re: [flask] Flask.request.args.get() and non-ascii characters

From:
Stephane Wirtel
Date:
2010-07-20 @ 09:46
Armin,

We can this code in the snippet section.

Stephane
On 07/20/2010 11:34 AM, Armin Ronacher wrote:
> Hi,
> 
> On 7/20/10 10:24 AM, Eunjin Lee wrote:
>> When URL parameter's value contains any non-ascii character (like Korean '한글'),
>> Flask.request.args.get() method doesn't return valid values but blank
>> values (exactly<u''>)
>>
>> For example URL like<http://test.com:3000/result/?res_cd=0000&res_msg=정상처리>
>>
>> - request.args.get('res_cd', None) returns '0000' and
>> - request.args.get('res_msg', None) returns u'' (blank)
> By default Flask assumes UTF-8 encoding for URLs.  If you don't have 
> UTF-8 URLs, you will have to let flask know that:
> 
> 
> from flask import Request, Flask
> 
> class KoreanRequest(Request):
>      url_charset = 'euc-kr'
> 
> app = Flask(__name__)
> app.request_class = KoreanRequest
> 
> 
> Regards,
> Armin

Re: [flask] Flask.request.args.get() and non-ascii characters

From:
Armin Ronacher
Date:
2010-07-20 @ 09:42
Hi,

Something I forgot, you will also need to tell the URL map the new charset:

app.url_map.charset = 'euc-kr'


Regards,
Armin

Re: [flask] Flask.request.args.get() and non-ascii characters

From:
Eunjin Lee
Date:
2010-07-20 @ 10:05
Thank you very much, Armin :)

2010/7/20 Armin Ronacher <armin.ronacher@active-4.com>:
> Hi,
>
> Something I forgot, you will also need to tell the URL map the new charset:
>
> app.url_map.charset = 'euc-kr'
>
>
> Regards,
> Armin
>