LoginSignup
1

More than 5 years have passed since last update.

python + ajaxのPOST通信では、urllib.parse.unquote_plus()を使うべし

Last updated at Posted at 2018-12-27

 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)  #"+"をスペースに置き換える

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1