ワトソンメモ
スポンサーリンク
カテゴリ:curl
対象OS:Windows
例えばGoogle Chrome より以下の URL を入力したとします。
https://<ドメイン名>/パス?text=パスワードが分かりません
この場合、Chromeは "パスワードが分かりません" という文字列を UTF-8として扱い、%エンコードされてサーバに送信されます。
具体的には以下のようにエンコードされます。
https://<ドメイン名>/path?text=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%81%8C%E5%88%86%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93
一方で curl.exe によりWindows の コマンドプロンプトにより以下のコマンドにより get を実行したとします。
curl -verbose -k -G -u "%USERNAME%":"%PASSWORD%" "%APIURL%/%CLASSIFIER_ID%/path" --data-urlencode "text=パスワードが分かりません"
この場合以下のように%エンコードされて送信されます。これはShift-JIS としてエンコードされています。
text=%83%8A%83Z%83b%83g%83p%83X%83%8F%81%5B%83h
サーバ側がUTF-8のみ認識する場合は、上記のWindows からの実行ではエラーとなります。
2016年現在では、コマンドプロンプトはUTF-8を表示することは可能ですが、文字コートとして扱うことは出来ないようです。
(注意)ただし文字列がいわゆる2バイトコードを含まない場合は、Shift-Jisとしてencodeして送信しても問題ないようです。
Windowsで UTF-8 エンコードするには、UTF-8としてテキストファイルを保存し送信する方法が有効です。
--data-urlencodeにパラメータ名@<ファイルパス> という形式で指定します。
例:
curl -verbose -k -G -u "%USERNAME%":"%PASSWORD%" "%APIURL%/%CLASSIFIER_ID%/path" --data-urlencode text@<ファイルパス>
<ファイルパス>には UTF-8で保存したテキストファイルを指定します。(text@c:\temp\question.txtなど)
参考:curl でどのようにエンコードされて送信されているかを標準エラー出力に出力するには、-verbose オプションを使用します。
スポンサーリンク