Java で GBK から UTF-8 に文字化けするコードの解決策
GBK エンコードを使用すると、相手は UTF-8 エンコードになります。 . データを送信する際は、相手が文字化けしないようにGBKエンコードデータをUTF-8エンコードデータに変換する必要があります。
問題が発生します: GBK を UTF-8 に変換すると、奇数の漢字は文字化けしますが、偶数の漢字は文字化けしません。
原因分析:
public static void analyze() throws UnsupportedEncodingException { String gbk = "我来了"; String utf8 = new String(gbk.getBytes("UTF-8")); for (byte b : gbk.getBytes("UTF-8")) { System.out.print(b + " "); } System.out.println(); for (byte b : utf8.getBytes()) { System.out.print(b + " "); } } /* -26 -120 -111 -26 -99 -91 -28 -70 -122 -26 -120 -111 -26 -99 -91 -28 -70 63 ! */
最後のバイトが異なることに注意してください。上記の行は正しい UTF-8 エンコーディングです。では、なぜ次の行の最後のバイトが -122 ではなく 63 なのでしょうか?これが意味不明の原因です。
GBK エンコードは中国語で 2 バイトですが、UTF-8 エンコードは中国語で 3 バイトです。getBytes("UTF-8") メソッドを呼び出すと、バイトは計算によって追加され、2 から変化します。 GBK のバイト数から UTF-8 に対応する 3 バイト数まで。したがって、上の例の 3 つの漢字は 9 バイトを出力します。
(関連ビデオ チュートリアルの共有: java ビデオ チュートリアル)
問題を解決する
これが最後の確認事項です。バイトが正しいことを確認します。 getBytes("UTF-8") を呼び出してバイト配列に変換する場合、ISO-8859-1 でエンコードされた文字列を作成します。ISO-8859-1 エンコードでは 1 バイトが 1 文字に対応するため、最後のバイトは変更されません。 間違い。
rree以上がJava での GBK から UTF-8 への文字化けコードの解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。