| 
 | 
[ トップページ ]
 [ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ] ヘッダ検索 ■ JSP.文字コード
この文字列がPOSTのボディ部分
( POST は Body に組み込まれる )
 
  日本語の場合は歴史的な経過から文字エンコーディングが複数存在する
  現在はMicrosoftが開発しWindows系で一般的に採用されている 
  Shift_JIS と呼ばれるもの
  POINT
    win32 環境では SJIS が一般的
    Linux系で一般的に採用されてい る
    EUC-JP の2つのエンコーディング双方が利用
    WebSphere はShift_JIS がデフォルト
WTE のサーブレット・エンジンもクライアントから
    URLエンコードで送られてきたパラメタ(バイト列)を
    Shift_JISの文字コード列だと見なしてこれをJavaのUnicodeに変換する
    WTE の環境では
    クライアントがEUC-JPで要求パケットを送ってくると問題
    WebSphere のアプリケーション・サーバでは設定ファイルの
    デフォルトの
    クライアント・エンコーディングを変更してこれに対応することになる
    これ以外にもPOST要求でHTTP要求のボディ部分に
    クライアントからのパラメタを書き込ませ
    これをバイトごとに読み出してEUC-JPとしてUnicodeに変換する手段もあるが一般的ではない
     WTEの環境ではクライアントから必ず
      Shift_JISでエンコードされた要求が到来するようにすることが推奨される
      サーバに情報を送信するためのフォームを含む HTML ドキュメントが表示され
      ユーザがその画面の送信ボタンをクリックして必要な情報をサーバに送信する際
  POINT
     IE, Netscapeのブラウザは
     HTML文書の文字コードを使ってバイト列を作成し、URLエンコードする
  クライアントに渡すフォームを含む
  HTMLドキュメントには以下の要素を含めることが必要
  これは SJIS でかかれてまよ ! と宣言する
  そして SJIS として URLEncode される
  < META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS" >
  更にサーブレットからそのような画面をクライアントに返すときは
  エンジンに変換する文字エンコーディングを明示的に指示するだけでなく
  クライアントに
  HTTP 応答パケットのヘッダ行で使用文字エンコーディングをはっきり通知すべき
  response.setContentType("text/html; charset=Shift_JIS");  // 応答ヘッダContent-Type行追加
  Websphere のエンジンはShift_JISでエンコードされた要求パラメタは正しくUnicodeに変換してくれている
  Tomcat のエンジンはそれほど親切ではない
  このサーブレットは
  Tomcat のコンテナで走らせると漢字は正しく表示されない
  
  変換する前の文字コードは ISO8859_1(Latin-1) であると仮定して
  8859_1 から Unicode への変換テーブルを用いて
  String 型 のオブジェクトにしてしまう
  ここが Java の Default の操作
  POINT
    JAVA は URL を decode するときに "8859-1" として仮定していること -> それを UNICODE に変換する
  Byte --> 8859_1 --> request.getParameter( "xxx" )  
  --->   getBytes( "8859-1" ); ---> 指定した文字コードに変換しろ  となる
      ( Java の勝手な解釈 )                         もう一度 バイトコードをくれ getBytes( "8859-1" ) これをもとに  
Shift_JIS や EUC-JP の文字列が URLエンコード されてくると
対応した 正しい Unicode の文字列が得られない
 
String correctName = new String(name.getBytes("8859_1"), "Shift_JIS");
// 指定文字コードに対応した Byte 列をかえす
getBytes(String charsetName) 
指定された文字セットを使用してこの String をバイトシーケンスに符号化し
結果を新規バイト配列に格納します
  // HttpRequestDumpの要求パラメタの出力部分を
  // Tomcat用に変更する
 | 
 金利比較.COM  | 






