getBytes() и русские символы - Java

155
26 октября 2018, 02:10

Столкнулся с проблемой в примере из книги Шилда :

public class ByteArrayInputReset {
public static void main(String[] args) throws UnsupportedEncodingException {
    String tmp = "abc"; // - Проблема ТУТ
    byte buf[] = tmp.getBytes();
    ByteArrayInputStream in = new ByteArrayInputStream(buf);
    for (int i = 0; i < 2 ; i++) {
        int c;
        while ((c=in.read()) !=-1){
            if (i==0){
                System.out.print((char) c);
            }else {
                System.out.print(Character.toUpperCase((char)c));
            }
        }
        System.out.println();
        in.reset();
    }
}
}

Суть в том, что если я ввожу английские символы в строку tmp, то на консоль все выводится как положено, Но если вводим русские символы (или строки), то на выходе получаем:

абв.

byte buf[] = tmp.getBytes("UTF-8");

Так пробовал разные кодировки, не помогло.

Думаю важно добавить - работаю в intellij idea 2018, настройки - File Enkoding

Стандартный вывод - sout работает как надо

но вот при использовании метода tmp.getBytes(); и русских символов, буфер забивается (непонятной) кодировкой и соответственно извлекается ересь

повторюсь, при использовании анг. символов все отрабатывает как надо.

Объясните пожалуйста как добиться правильного вывода и в чем ошибка?

READ ALSO
Путаница в getter и setter

Путаница в getter и setter

Объясните пожалуйста, почему для setName пишем в аргументах (String a) a не (String name)? Аналогичный вопрос к (String color) - почему не (String a) и потом color = a? Зачем...

159
Удаление get переменной

Удаление get переменной

Стоит следующая задача, находясь на странице имеется n-ое количество get переменных, при нажатии на Del, необходимо остаться на данной странице,...

174
Массивы – предзаполнение и заполнение

Массивы – предзаполнение и заполнение

У меня задача сделать плейсхолдеры для товаров на время загрузкиНе могу найти правильный подход

170