Flask-Restful APIサーバーに対するajaxリクエストのユニコードに関する奇妙な問題があります。問題は1台のマシンでのみ表示されますが、別のマシンでは表示されません。Flask-Restful APIとJSONのUnicodeの問題
私は安らかなクラスを持っています。文字フィールドはUnicodeに設定されています。
class PostListApi(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('body', type = unicode, required = True, help = 'No description provided', location = 'json')
self.reqparse.add_argument('longitude', type = float, required = False, help = 'Unknown address', location = 'json')
self.reqparse.add_argument('latitude', type = float, required = False, help = 'Unknown address', location = 'json')
self.reqparse.add_argument('address', type = unicode, required = True, help = 'No address specified', location = 'json')
self.reqparse.add_argument('scheduled', type = str, required = True, help = 'Not scheduled correctly', location = 'json')
super(PostListApi, self).__init__()
私の問題は、BODYにラテン文字を含むajaxリクエストを送信すると、サーバーが400エラーで返信することです。
Request URL:
Request Method:POST
Status Code:400 BAD REQUEST
Request Headersview source
Accept:undefined
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Content-Length:159
**Content-Type:application/json; charset=UTF-8**
Proxy-Authorization:Basic a3lyeWxvLnlhdHNlbmtvOnBhc3N3b3JkMTIzNDU2
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payloadview parsed
{"body":"this is a test","address":"141 Rue Saint-Martin, 75003 Paris, France","longitude":2.351530499999967,"latitude":48.8614575,"scheduled":"20131017 1000"}
しかし、データがシリルアルファベットである場合、サーバーは要求を適切に管理します。
Request URL:
Request Method:POST
Status Code:500 INTERNAL SERVER ERROR
Request Headersview source
Accept:undefined
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Content-Length:208
**Content-Type:application/json; charset=UTF-8**
Cookie:
Proxy-Authorization:Basic a3lyeWxvLnlhdHNlbmtvOnBhc3N3b3JkMTIzNDU2
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payloadview source
{body:Йн незл ножтрюд оффÑндйт вÑш,…}
address: "Йн незл ножтрюд оффÑндйт вÑш"
body: "Йн незл ножтрюд оффÑндйт вÑш"
latitude: 48.8614575
longitude: 2.351530499999967
scheduled: "20131017 1000"
Response Headersview source
Connection:Keep-Alive
Content-Length:51
Content-Type:application/json
Date:Thu, 17 Oct 2013 08:03:41 GMT
Proxy-Connection:Keep-Alive
Server:WSGIServer/0.1 Python/2.7.5
リクエストの生成はjqueryの
のAjaxの方法で行われますが、前に同様の問題に会ったことがありますか?どのようにこれに取り組むことができますか?私はラテン文字もサーバーに送信する前にユニコードにエンコードする必要がありますと思います。どのようにしてjqueryがすべてをUnicodeにエンコードすることができますか?
ありがとうございます!
でこの問題と問題を持っていない「データがcyrilicアルファベットである場合に、サーバがリクエストを適切に管理します。」 cyryllicで物事を送信するときに投稿したコードの3番目の部分で判断すると、サーバーは500個のコードで応答します - Internal Server Error、これも問題ありません。そのPostListApiクラスは、サーバー上にあるすべてのクラスですか?いくつかのルートとビュー機能はどうですか? –
私はあなたの質問を理解していない。テキストが** cyrilicの場合、サーバーは500コードで応答しません。テキストがlatin(最初の要求例)の場合、400エラー(パラメータが見つかりません)が発生します。 – ryzhiy
@ryzhiy:応答にステータスコード:500内部サーバーエラー "が含まれています。どうやって手に入れたの?どのように出力を生成するのですか?代わりに 'repr()'を表示できますか? – jfs