yuu_nkjm blog
2011-07-30(Sat) 編集
[Servlet][Java] Servletで日本語のリクエストパラメータを取得する
下書き.未検証.暇な時にStringのバイト配列を出力させて,正しいか調べる.
GETによるリクエスト
ISO_8859_1の範囲だとOK
ab cd ↓(ブラウザがGET: UTF-8でエンコード) ab%20cd ↓(request.getParameter: ISO_8859_1でデコード) ab cd
HttpServletRequest.getParameterの時にバイト列から文字列に自動で変換されるが,この変換が間違っている.誤った変換を元に戻して(getBytes),正しい変換(new String(byteData, "UTF-8"))をし直す必要がある.
ウィキペディア ↓(ブラウザがGET: UTF-8でエンコード) %e3%82%a6%e3%82%a3%e3%82%ad%e3%83%87%e3%82%a3%e3%82%a2 ↓(request.getParameter: ISO_8859_1でデコード) 文字化けした何か ↓(getBytes: ISO_8859_1でエンコード) %e3%82%a6%e3%82%a3%e3%82%ad%e3%83%87%e3%82%a3%e3%82%a2 ↓(new String(byteData, "UTF-8")) ウィキペディア
POSTによるリクエスト
public class Sample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
request.setCharacterEncoding("UTF-8");
String val = request.getParameter("name");
}
}
極めてスマートに文字化けが回避出来るのですが、このメソッドではリクエストボディに含まれるデータの文字コードしか設定できません。「POST」メソッドを使った場合にはクライアントから送られてくるパラメータはリクエストボディに含まれるので問題ありませんが、「GET」メソッドを使った場合にはパラメータはURIの部分に含まれています。その為「setCharacterEncoding」メソッドを使ってもパラメータの文字コードの設定は行えませんので注意してください。
2012-07-30(Mon) 編集
[VirtualBox][Windows 7 (64bit)] ホストOS上のディレクトリをゲストOSと共有する
Windows上でvirtualboxを動かし,その上でopenSUSEを動かしている.openSUSEからWindows上の特定のディレクトリ(フォルダ)を共有する.
- Virtualboxを起動する.Virtualboxの上部のバーから,「Guest Additionをインストールを選択する」.これが必要かは不明.
- Virtualboxを停止させ,Virtualbox->設定から以下を設定.
フォルダのパス:U:\ShareWithVBox フォルダ名: 自動マウント:オン 永続化する:オン
- virtualboxを起動すると共有ディレクトリが/media/sf_ShareWithVBoxに共有されている.