проблема декодирования java-кодировок - PullRequest
2 голосов
/ 29 февраля 2012

Я пытаюсь декодировать символ ·, используя кодировку GB2312 в Java

Этот символ содержится в GB2312 , позиционный код a1a4 отметьте здесь

код:

public static void main(String[] _args) throws Exception {
    String str="a1a4:· a5f6:ヶ a8c5:ㄅ";          
    ByteBuffer bf=readToByteBuffer(new ByteArrayInputStream(str.getBytes()));
    System.out.println(Charset.forName("GB2312").decode(bf).toString());
}
private static final int bufferSize = 0x20000;
static ByteBuffer readToByteBuffer(InputStream inStream) throws IOException {
    byte[] buffer = new byte[bufferSize];
    ByteArrayOutputStream outStream = new ByteArrayOutputStream(bufferSize);
    int read;
    while (true) {
        read = inStream.read(buffer);
        if (read == -1)
            break;
        outStream.write(buffer, 0, read);
    }
    ByteBuffer byteData = ByteBuffer.wrap(outStream.toByteArray());
    return byteData;
}

Приведенный выше код выводит результаты для:

a1a4:? a5f6:ヶ a8c5:ㄅ

Не знаюне понимаю, почему не может декодировать a1a4?

1 Ответ

2 голосов
/ 29 февраля 2012

В моем браузере ваша строка d имеет пятый символ, закодированный как 0xB7, то есть MIDDLE DOT, а не KATAKANA MIDDLE DOT. Однако, согласно той же базе данных, которую вы упомянули, эта кодовая точка недоступна в наборе GB2312 . Аналогично, вы можете увидеть , что ни MIDDLE DOT, ни кодировка 0xB7 не указаны как часть GB2312 .

Я думаю, что проблема здесь в символах входной строки, а не в CharsetDecoder, предоставленном вашей JRE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...