Кодировка UTF для китайских иероглифовJava - PullRequest
7 голосов
/ 27 июля 2011

Я получаю строку через объект из веб-службы оси. Поскольку я не получаю ожидаемую строку, я сделал проверку, преобразовав строку в байты, и получаю C3A4C2 BDC2A0 C3A5C2 A5C2BD C3A5C2 90C297 в гекса, когда я ожидаю E4BDA0 E5A5BD E59097, что на самом деле 你 好吗 в UTF- 8.

Есть идеи, что может стать причиной того, что 3 好吗 станет C3A4C2 BDC2A0 C3A5C2 A5C2BD C3A5C2 90C297? Я выполнил поиск в Google, но все, что я получил, был китайский веб-сайт, описывающий проблему, которая происходит в python. Любые идеи будут отличными, спасибо!

1 Ответ

16 голосов
/ 27 июля 2011

У вас есть то, что называется двойной кодировкой.

У вас есть трехсимвольная последовательность "你 which", на которую вы правильно указываете, она кодируется в UTF-8 как E4BDA0 E5A5BD E59097.1004 * Но теперь начните кодирование каждого байта кодировки ТА в 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();
    }

}

...