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上の特定のディレクトリ(フォルダ)を共有する.

  1. Virtualboxを起動する.Virtualboxの上部のバーから,「Guest Additionをインストールを選択する」.これが必要かは不明.
  2. Virtualboxを停止させ,Virtualbox->設定から以下を設定.
    フォルダのパス:U:\ShareWithVBox
    フォルダ名:
    自動マウント:オン
    永続化する:オン
    
  3. virtualboxを起動すると共有ディレクトリが/media/sf_ShareWithVBoxに共有されている.

トップ «前の日(07-29) 最新 次の日(07-31)» 追記 設定
2006|01|06|12|
2007|06|09|
2008|01|03|04|06|07|08|09|10|12|
2009|01|02|05|06|07|08|10|11|12|
2010|03|04|05|06|07|08|09|10|11|
2011|01|02|03|04|05|06|07|08|09|11|12|
2012|01|02|04|06|07|08|10|11|12|
2013|01|02|03|07|08|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|
2015|01|02|07|11|12|
2016|01|03|05|07|08|09|