python + ajaxのPOST通信では、urllib.parse.unquote_plus()を使うべし
python + ajaxのPOST通信では、urllib.parse.unquote_plus()を使うべし:
ajax+python通信で、エンコードしたパラメタをPOSTする時、リクエストに半角スペースが含まれていると、スペースはpython側で"+"に自動変換される。
なので、python側では、"+"を半角スペースに置き換える必要があるので、unquoteではなくunquote_plusを使う。
割とはまったので、報告まで。
追記
特殊記号もエンコードする場合は、下記を使用する。
ajax+python通信で、エンコードしたパラメタをPOSTする時、リクエストに半角スペースが含まれていると、スペースはpython側で"+"に自動変換される。
なので、python側では、"+"を半角スペースに置き換える必要があるので、unquoteではなくunquote_plusを使う。
main.js
//送信側 //空白ありのパラメタ let param = encodeURI("space space"); //実際に送信されるパラメタ //space%20space <- まだ、スペースは%20のまま
main.py
#受け取り側 param = "space+space" #なぜか、%20 -> + に置き換わっている urllib.parse.unquote_plus(param) #"+"をスペースに置き換える
追記
特殊記号もエンコードする場合は、下記を使用する。
main.js
//送信側 //特殊記号(ここでは"+")を含むパラメタ let param1 = encodeURI("a + b"); //a%20+%20b let param2 = encodeURIComponent("a + b"); //a%20%2b%20b
main.py
#受け取り側 param1 = "a+++b" #a b <- "+"が半角スペースに置き換えられる param2 = "a+%2b+b" #a + b urllib.parse.unquote_plus(param) #"+"をスペースに置き換える
コメント
コメントを投稿