Что происходит с кодировкой при конкатенации строк Java?
Вывожу в консоль так: System.out.println("Распознано: " + utterance);
В переменной utterance содержится текст из файла в кодировке UTF8.
В консоли получаю следующее: Распознано: С?РёС?С?С?
В дебагере в переменной содержится нормальный текст. Перепробовал разные способы. Ну например так: System.setOut(new PrintStream(System.out, true, "cp866"));
Пробовал: -Dfile.encoding=utf-8
При всех способах либо первая половина отображается неверно либо вторая. Как же так получается, что одна половина строки в одной кодировке, а другая - в другой. Кто-нибудь может объяснить суть проблемы?
Просто вот такой вариант:
String s = "Распознано: " + utterance; // s = "Распознано: выход"
System.out.println(s);
Половина отображается криво, половина - нормально. Как такое может быть?
В консоли (cmd.exe) перед вызовом компилятора переключите кодовую страницу командой
chcp 1251
Достаточно сделать это один раз при каждом запуске консоли. javac в русскоязычной Windows выводит сообщения в кодировке cp1251, а консоль использует cp866.
Насколько я понимаю, у меня на вывод попадает строка, в которой две части в разных кодировках. Потому что по-другому я никак не могу объяснить такое явление, когда пол строки кириллицы выводится нормально, а половина - нет. Можно ли как-то в строке посмотреть, какова ее текущая кодировка?
mao_z: кодировку строки вы можете только угадать :( Есть несколько кодировок: кодировка исходника, кодировка компиляции (по дефолту системная), кодировка консоли (в Windows отличается от системной) и кодировка системы. Где-то что-то чему-то не соответствует
mao_z: Попробуйте другие редакторы. Времени скачать и установить потребуется от силы пару часов. Хорошо перекодирует Notepad++. У меня было похожее с Eclipse. В самой IDE всё красиво, а через консоль касячит. Попробовал IDEA. Таких проблем не было. Использую Notepad++ - там проще кодировки выставлять.
лучше сразу отказаться от использования windows и их консоли в частности, раз и навсегда, если конечно вы не хотите познать этот прекрасный мир виндовс костылирования.
Возможно, ваш исходник на диске в кодировке Windows-1251. Сохраните его как UTF-8 (без BOM, скорее всего)). Если так и было, то, по кр. мере, теперь вся выводная строка будет в единой кодировке. И должна выводиться или искажаться равномерно)))