Java: разные байты [] имеют одинаковую строку в utf8 - PullRequest
0 голосов
/ 27 декабря 2018

Есть два разных байтовых массива. Когда я получаю String из byte []. Они имеют одинаковое значение, когда я использую utf8.Напротив, когда я использую ISO-8859-1.

    byte[] valueFir = new byte[]{0, 1, -79};
    byte[] valueSec = new byte[]{0, 1, -80};

    Charset CHARSET = Charset.forName("ISO-8859-1");
    Charset UTF8SET = Charset.forName("UTF-8");
    Charset[] list = new Charset[]{CHARSET, UTF8SET};

    for(int i=0; i<list.length; i++){

        String fir = new String(valueFir,list[i]);
        String sec = new String(valueSec,list[i]);

        Assert.assertNotEquals(fir,sec);
    }

Первое утверждение верно, Второе утверждение не удалось.в чем причина?

1 Ответ

0 голосов
/ 27 декабря 2018

Если вы посмотрите на Javadoc для конструктора String, который вы используете , он говорит:

Этот метод всегда заменяет последовательности некорректного ввода и не отображаемых символовсо строкой замены этого набора символов по умолчанию.

Теперь в UTF8 байты -79 и -80 не отображаются на отдельные символы.Так что оба ваших байтовых массива не имеют смысла в UTF8.И поскольку они не отображаются, вы просто получаете значение по умолчанию String дважды.Затем ваш assertNotEquals сравнивает значение по умолчанию String с самим собой.

Однако ваши байтовые массивы имеют смысл в ISO-8859-1 и преобразуются в два разных значения String.

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