8

軸Webサービスからオブジェクトを介して文字列を受信して​​います。期待した文字列が得られないため、文字列をバイトに変換してチェックしました。実際にはUTF-で你好吗であるE4BDA0 E5A5BD E59097を期待しているときに、C3A4C2 BDC2A0 C3A5C2 A5C2BDC3A5C290C297をヘキサで取得します。 8.8。

你好吗がC3A4C2BDC2A0C3A5C2 A5C2BD C3A5C2 90C297になる原因は何ですか?私はグーグル検索をしました、しかし私が得たのはパイソンで起こる問題を説明している中国のウェブサイトだけでした。どんな洞察も素晴らしいでしょう、ありがとう!

4

2 に答える 2

17

ダブルエンコーディングと呼ばれるものがあります。

正しく指摘した3文字のシーケンス「你好吗」がUTF-8でE4BDA0E5A5BDE59097としてエンコードされています。

しかし今、UTF-8でそのエンコーディングの各バイトのエンコーディングを開始します。E4から始めます。UTF-8のそのコードポイントは何ですか?それを試してみてください!C3 A4です!

あなたはアイデアを得る....:-)

これを説明するJavaアプリは次のとおりです。

public class DoubleEncoding {
    public static void main(String[] args) throws Exception {
        byte[] encoding1 = "你好吗".getBytes("UTF-8");
        String string1 = new String(encoding1, "ISO8859-1");
        for (byte b : encoding1) {
            System.out.printf("%2x ", b);
        }
        System.out.println();
        byte[] encoding2 = string1.getBytes("UTF-8");
        for (byte b : encoding2) {
            System.out.printf("%2x ", b);
        }
        System.out.println();
    }
}
于 2011-07-27T01:24:41.817 に答える
0
public class Encoder{
    public static void main(String[] args) throws Exception {
     String requestString="你好";
     String ISO = new String(requestString.getBytes("gb2312"), "ISO8859-1");
     String plaintxt = new String(ISO.getBytes("ISO8859-1"), "gb2312");
     plaintxt.getBytes("UTF-8");
    }
}
于 2021-03-22T04:39:34.890 に答える