ホームページ  >  記事  >  Java  >  Java での GBK から UTF-8 への文字化けコードの解決策

Java での GBK から UTF-8 への文字化けコードの解決策

angryTom
angryTomオリジナル
2020-02-10 10:53:478372ブラウズ

Java での GBK から UTF-8 への文字化けコードの解決策

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。