Китайские иероглифы из HTML текста печатаются правильно для некоторых сайтов, но не для других - PullRequest
0 голосов
/ 30 апреля 2020

Я пытался распечатать текст HTML для https://top.baidu.com и https://www.qq.com, которые оба используют кодировку символов GB2312. Он выводится на консоль нормально, за исключением китайских символов, которые выглядят как нечитаемый текст, например �� 㿴 ���ģ�ȫ�й�� ...

Однако китайские символы появляются просто хорошо, когда я меняю адрес на https://www.sina.com.cn или https://world.taobao.com, оба из которых используют UTF-8.

Кроме приятного запроса Baidu и QQ о переключении к UTF-8, что я могу с этим поделать? Вот мой код.

    try {
        String address1 = "https://top.baidu.com"; //unreadable
        String address2 = "https://www.qq.com"; //also unreadable
        String address3 = "https://www.sina.com.cn"; //readable
        String address4 = "https://world.taobao.com"; //readable, too

        URL url = new URL(address1);
        StringBuilder htmlText = new StringBuilder();
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        InputStream stream = connection.getInputStream();
        InputStreamReader reader = new InputStreamReader(stream);
        int data = reader.read();

        while (data != -1) {
            char current = (char) data;
            htmlText.append(current);
            data = reader.read();
        }
        System.out.println(htmlText);

    } catch (Exception e) {
        e.printStackTrace();
    }

1 Ответ

0 голосов
/ 30 апреля 2020

Прочитав комментарий Андреаса, я посмотрел альтернативный конструктор для InputStreamReader и обнаружил следующее:

InputStreamReader reader = new InputStreamReader(stream, Charset.forName("GB2312"));
...