JAVA WEBアプリケーション開発における中国語問題の一つである文字列の入力


中国語の文字化けしの問題はJAVA WEB開発の初心者がよく出会う問題で、この問題は実は複雑ではありませんて、開発者がWEB開発の全体の環境に対してはっきりした認識がある限り、やはり解決しやすいです.
Java言語の内部ではUNICodeで文字列を表すため、JVMに入る文字列と離れる文字列をUNCODE形式に変換する必要があります.
JAVA WEB開発の過程で、プログラムの部分はJSPあるいはHttpServiceで、文字列は3つの主要な進入点があります:html form、ソースプログラム、外部データソース(よくあるデータベースと資源ファイルがあります).
まずソースプログラムについてお話しします.
私達はいつもソースプログラムの中でいくつかのテキストを書くことができて、特にJSPの中で、“書きます”の時エディタを通じてファイルに保存したので、まず明らかにしなければならないのは:エディタはファイルをどんな符号化のフォーマットに保存しましたか?VIMを例にとると、MS Windows内の領域が中国に設定されているなど、システムのデフォルト言語符号化でファイルが保存され、cp 936で文字列が符号化され、cp 936はGB 2312である.ただし、set encodingまたはset fileencodingで変更できます.
次のソースプログラムはコンパイラによってバイトコードに変換され、jspは先にコンパイルされる.JAvaは、サーブレットと同じようにコンパイルされます.classは、コンパイラがソースファイルを正しい符号化で読み込むことを保証し、コンパイラが正しいフォーマットで変換して文字列をバイトコードに書き込むことができます.
最後に、JVMはバイトコードをロードし、文字列をUCS 16としてメモリに格納します.前の各ステップの変換プロセスが間違っていない限り、このステップは正常に動作します.この段階では、応用開発や布署員がコントロールできない.
ソースプログラムの文字列は、jspの静的部分とプログラムによって動的に出力される部分の2つに分けることができます.jspはコンパイルされている.JAva後も、outを通過することになります.print()出力は,実際にはプログラムで出力される部分と本質的な違いはない.サーブレットやjspのscriptletにとって、文字列定数をハードコーディングするのは良い習慣ではありませんが、国際化の要求が高くないアプリケーションには確かに便利で、よくある人がいます.
静的テキストは、上記の各ステップの変換に誤りがなければ、最後にサーブレットContainerに正しくアクセスできます.
外部データソースについても説明します.
外部データソースの文字列は何らかのフォーマットで符号化されて保存され、変換プログラムで読み込まれます.一般的なファイルにとって、この変換プログラムはiostreamライブラリであり、resouce bundleファイルにとって変換プロセスはResouceBundleのproperty読み取り方法であり、データベースにとってJDBC DriverのResultSetのgetString()方法である.文字列がどのような符号化でメモリに保存されているのか、サービスプログラム(ファイルシステムやDBMS)がどのような符号化で変換プログラムに伝達されているのか、サービスプログラムが伝達される前に符号化変換を行ったことがあるかどうか、変換プログラムが受信する符号化が実際に受信した符号化と一致しているかどうか、変換プログラムが正常に動作しているかどうかなど、複数の問題があります.しかし、複雑な話をしているが、実際にプログラムを書くのは簡単で、jdbc urlにパラメータを追加して符号化フォーマットを指示したり、Readerを構築するときにCharsetパラメータを追加したりすることにほかならない.問題が発生したときだけ、一歩一歩調べる必要がある.
最も面倒なのは、最も重要なhtml formです.
formはWEBアプリケーションでユーザーが情報を入力する主な手段であり、formはブラウザで表示され、ユーザーがsubmitをクリックした後、その内容をパッケージ化してhttpプロトコルを通じてサーバー側に提出する.
formは通常、GETまたはPOSTメソッドでコミットされますが、ブラウザで転送する方法は少し異なります.GETはapplication/x-www-form-urlencoded,form url ; POST application/x-www-form-urlencoded multipart/form-data,form http 。 form ISO 8859_1 。

html , form , 。

WEB Container URL , Servlet Container
(Apache modjk) ,Servlet Container HTTP , HttpServletRequest , url mapping Request HttpServlet。

HttpServlet HttpServletRequest , getCharacterEncoding() , , null。 form , Request , setCharacterEncoding() ,HttpServletRequest 。

html form , 。