次のエディタは、javaWEB のフロントエンドとバックエンドの文字化けの問題に対する解決策の概要を示します。編集者はこれがとても良いと思ったので、参考として共有します。エディターに従って、JAVA におけるいくつかの一般的なエンコード形式と意味を見てみましょう:
ASCII コード
コンピューターを勉強したことのある人なら誰でも知っている ASCII コードは、合計 128 あります。 7 ビットのバイトで、0 ~ 31 は改行、復帰、削除などの制御文字で、32 ~ 126 はキーボードから入力して表示できる印刷文字です。
ISO-8859-1
128文字では明らかに不十分であるため、ISO組織はASCIIコードを拡張するためにASCIIコードに基づいていくつかの規格を策定しました。ISO-8859-1〜ISO-8859-15です。 ISO-8859-1 はほとんどの西ヨーロッパ言語の文字をカバーしており、最も広く使用されています。 ISO-8859-1 は依然としてシングルバイトエンコーディングであり、合計 256 文字を表現できます。
GB2312
その正式名称は「情報交換のための中国語エンコード文字セットの基本セット」であり、合計のエンコード範囲は A1 ~ F7 であり、そのうち A1 ~ A9 がエンコードです。 B0 から F7 までの合計 682 個のシンボルを含むシンボル領域は、6763 個の漢字を含む漢字領域です。
GBK
正式名称は「漢字内部コード拡張仕様」で、国家技術監督局が策定したWindows 95用の新しい漢字内部コード仕様です。 GB2312とさらに中国語の文字を追加すると、そのエンコード範囲は 8140 ~ FEFE (XX7F を除く) で、合計 23940 コード ビットを表現できます。そのエンコードは GB2312 と互換性があり、GB2312 でエンコードされた中国語の文字をデコードできます。 GBKなら文字化けもありません。
GB18030正式名称は「情報交換用中国語コード化文字セット」で、私の国では必須の標準です。これは、シングルバイト、ダブルバイト、または4バイトのエンコーディングです。エンコーディングは GB2312 エンコーディングと同じです。これは国家標準ですが、実際のアプリケーション システムでは広く使用されていません。
UTF-16UTFと言えば、ISOは新しいハイパー言語辞書を作成しようとしていることに言及する必要があります。この辞書を通じて世界中のすべての言語にアクセスできます。お互いに翻訳します。この辞書がどれほど複雑であるかは想像できるでしょう。Unicode の詳細な仕様については、対応するドキュメントを参照してください。 Unicode は Java と XML の基礎です。次に、コンピュータにおける Unicode の保存形式について詳しく説明します。 UTF-16 は、コンピューター内で Unicode 文字にアクセスする方法を具体的に定義します。 UTF-16 は、Unicode の変換形式を 2 バイトで表現するため、どの文字でも 2 バイトで表現できるため、UTF-16 と呼ばれます。 UTF-16 は、文字を表すのに非常に便利です。これは、文字列を操作する際の操作を大幅に簡素化します。これは、Java がメモリ内の文字格納形式として UTF-16 を使用する非常に重要な理由でもあります。
UTF-8UTF-16 は、1 つの文字を表すのに一律 2 バイトを使用しますが、非常に単純で便利ですが、1 つで多数の文字を表現できるという欠点もあります。現在のネットワーク帯域幅は依然として非常に限られているため、これはネットワーク送信トラフィックの増加につながりますが、これは不要です。 UTF-8 は可変長テクノロジーを使用しており、各エンコード領域の文字長は異なります。さまざまな種類の文字を 1 ~ 6 バイトで構成できます。
UTF-8 エンコード規則:1. バイトの最上位ビット (8 番目のビット) が 0 の場合、それは ASCII 文字 (00 – 7F) であることを意味します。すべての ASCII エンコーディングがすでに UTF-8 であることがわかります。 2. バイトが 11 で始まる場合、連続する 1 の数はこの文字のバイト数を示します。たとえば、110xxxxx はそれが 2 バイト UTF-8 文字の最初のバイトであることを意味します。 3. バイトが 10 で始まる場合、それは最初のバイトではないことを意味し、現在の文字の最初のバイトを取得する必要があります
さまざまなエンコード形式の比較GB2312 と GBK のエンコード規則は似ていますが、GBK の方が範囲が広く、すべての漢字を処理できるため、GB2312 と GBK を比較する場合は、GBK を選択する必要があります。 UTF-16 と UTF-8 は両方とも Unicode エンコードを扱いますが、エンコード規則は同じではありません。比較的言えば、UTF-16 エンコードが最も効率的で、文字をバイトに変換する方が簡単で、文字列の実行に適しています。オペレーション。ローカル ディスクとメモリの間での使用に適しており、たとえば、Java のメモリ エンコーディングは UTF-16 エンコーディングを使用します。ただし、ネットワーク転送ではバイト ストリームが破損しやすいため、ネットワーク間の転送には適していません。これに比べて、UTF-8 はネットワーク転送に適しており、単一のバイト ストリームを使用します。さらに、単一の文字が損傷しても、後続の文字には影響しません。したがって、UTF-8 は、エンコード効率とエンコードのセキュリティのバランスが取れており、理想的な中国語エンコードです。方法。
中国語の文字化けの解決策:
1. Tomcat 自体のエンコーディングは ISO-8859-1 形式であり、中国語のエンコーディングと互換性がありません。同じ形式を使用して受信し (ISO-8859-1)、解析可能なエンコーディング (utf-8) を使用して変換します。処理後フロントへお渡し致します。フロントに送信する際は、
res.setContentType("text/html;charset=utf-8");//ページに表示される中国語の文字化けの問題を解決するために、ページの文字エンコーディングを設定する必要があります。インターフェース;
2.req. setCharacterEncoding("utf-8");//データがこの方法で読み取られるため、最初に記述する必要があります。そうしないと、データが間違ってしまいます。
3.Spring は文字化けの問題を解決するために使用できる CharacterEncodingFilter フィルターを提供します。
CharacterEncodingFilter を使用する場合は、次の問題に注意する必要があります:
フォームデータは POST モードで送信されます。
CharacterEncodingFilter フィルターを Web で設定します。
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param=name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上記は情報を調べて記述されています。コードを書く過程で私が遭遇した問題を要約します。これは私が知っていることであり、解決策があるはずです。
以上がJavaWEBの前後文字化け問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。