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