|
[ トップページ ]
[ ____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 |