| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > кодировки, не понимаю как работает код |
| Автор: libertas 10.4.2014, 08:52 | ||||||
| Всем привет. Подскажите, пожалуйста, почему так работает код:
Если выводить это через Intellij IDEA то выводится так: System.out puts: Это строка с русским текстом PrintWriter puts: �� ��ப� � ���᪨� ⥪�⮬ Если использовать консоль, то иероглифы и там и там? Почему так и почему по-разному? Дальше посимвольный ввод:
через Intellij IDEA если ввести русскую букву, то а � -> 9576 � -> 9617 -> 10 а английскую: f -> 102 -> 10 Почему для русского варианта выводится 2 строки, а для русского одна? При этом в консоли: f -> 102 -> 13 -> 10 а а -> 1072 -> 13 -> 10 Почему есть разница в выводе в консоли и intellij idea? И ещё в intellij idea если нажимать <Ctrl>+<Z> программа не прерывается. Спасибо. |
| Автор: LSD 10.4.2014, 10:59 |
| System.out это стандартный поток вывода, в общем случае это бинарный поток, но многие программы трактуют его как символьный вопрос только насчет кодировки символов. IDEA ставит умолчальной кодировкой UTF-8 и ожидает что текст в консоль будет писаться в UTF-8 а не 866, потому стандартный PrintWriter который ассоциирован с System.out работает нормально. Что касается консоли Windows, то сама консоль работает в 866 кодировке, и вобще говоря OutputStreamWriter с Cp866 должен отрабатывать нормально, если только ты руками кодировку в консоли не менял. А стандартный PrintWriter который ассоциирован с System.out работает в умолчальной кодировке системы, которая 1251, потому там кракозябры. |
| Автор: libertas 10.4.2014, 11:14 | ||||||||
Спасибо. PrintWriter пишет в UTF-8 или 1251? не очень понял этот момент. А в консоли у меня для кода
System.out puts: ╨н╤В╨╛ ╤Б╤В╤А╨╛╨║╨░ ╤Б ╤А╤Г╤Б╤Б╨║╨╕╨╝ ╤В╨╡╨║╤Б╤В╨╛╨╝ PrintWriter puts: Р?С?Р? С?С?С?Р?РєР° С? С?С?С?С?РєРёР? С?Р?РєС?С?Р?Р? Я не менял кодировку. И почему для символьного ввода для русских и английских букв выводится разное количество строк для одного кода:
|
| Автор: LSD 10.4.2014, 13:26 |
Смотря какой. Тот который по умолчанию стоит в System.out пишет в умолчальной кодировке: при запуске из консоли это будет 1251, при запуске из IDEA будет UTF-8. Если ты сам создаешь PrintWriter то ты и задаешь для него кодировку. Запиши строку в файл в некой кодировке (например 1251). Возможно у тебя неправильная кодировка при компиляции. Т.е. файл в UTF-8, а компилятор работает с умолчальной системной. |
| Автор: libertas 10.4.2014, 14:01 |
| Ок, спасибо большое. Буду эксперементировать. |