![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| lkiryxa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.7.2008 Репутация: нет Всего: нет |
Привет.
Я очередной чайник с своими примитивными вопросами, но тем не менее прошу помощи у опытных гуру. При компиляции самой первой программы : class Hello { public static void main (String[] args){ System.out.println ("Привет Мир"); } } Русские символы в консоли отображаются неверно ![]() Подскажите, пожалуйста, что нужно сделать чтобы русские буквы отображались корректно ? Спасибо Это сообщение отредактировал(а) lkiryxa - 7.9.2010, 00:09 |
|||
|
||||
| aleksandy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 4 Всего: 5 |
||||
|
||||
| ivanovpv |
|
||||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 4 Всего: 28 |
На самом деле не все так однозначно...
1) В идеале при компиляции надо указывать кодировку - в вашем случае:
2) Но в данном случае это не поможет, поскольку вывод идет на окно с кодировкой 866... Так что результат будет cp1251->cp866 Выхода: Сразу писать на кодировке 866 (по старому досовская кодировка) и компилировать
А еще лучше писать на нормальной IDE которая вопросы кодировки решает самостоятельно. -------------------- Aut viam inveniam aut faciam |
||||
|
|||||
| Skipy |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
И это тоже не поможет. Указание кодировки при компиляции нужно для того, чтобы правильно перевести текст в UTF-16BE - кодировку, в которой строки хранятся в памяти. Для того, чтобы нормально отображался текст в консоли - нужно установить кодировку при выводе в консоль:
P.S. Правда, тогда в IDE будет невесть что. IDE-то показывает Cp1251, как правило... |
||||||
|
|||||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 4 Всего: 28 |
А ты попробуй сначала... и увидишь -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| Skipy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
Ну... Мне вообще-то и пробовать не надо было. Но ради спортивного интереса и чистоты эксперимента попробовал. Написал файл в Cp866, скомпилировал, запустил. Как я и говорил - не работает. При указании -encoding Cp866 та же самая картина. А вот БЕЗ указания - работает. Однако это есть следствие компенсации двух ошибок. Первая - байты Cp866 расцениваются как Cp1251 и переводятся совсем не в те символы, в которые должны. Это можно понять, если в байткоде скомпилированного класса найти нужную строку. А при выводе эти символы преобразуются обратно в байты Cp1251. То есть, на самом деле - Cp866. И только поэтому строка отображается правильно. Можете посмотреть прикрепленный пример. Два класса, во втором установлена кодировка System.out в Cp866. Сначала оба компилируются без указания кодировки, при этом работает первый, из-за компенсации ошибок. Потом оба компилируются с указанием кодировки, при этом в первом случае проблема присутствует, во втором - нет
Это сообщение отредактировал(а) Skipy - 8.9.2010, 10:20 Присоединённый файл ( Кол-во скачиваний: 3 )
sample.rar 0,65 Kb |
||||
|
|||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 4 Всего: 28 |
Ну как оказывается дело то не в этом, а в том, что в исходнике кодировка должна быть такая же как и на консоли. -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
Скажите, Вы хоть слово поняли из того, что я написал? Судя по всему нет. Объясняю еще раз. То, что в Вашем случае в консоли виден нормальный текст, является следствием наличия ДВУХ ошибок, одна из которых компенсирует другую. Перенесите этот код в Linux - и вывод опять будет испорчен. Просто потому, что кодировка консоли там - не Win1251 и не Cp866. Предлагаете перекодировать исходники и делать сборки под каждую кодировку консоли? Метод, предложенный мной, позволяет писать исходники в ЛЮБОЙ кодировке и правильно выводить текст на консоль с ЛЮБОЙ кодировкой. Это сообщение отредактировал(а) Skipy - 9.9.2010, 09:32 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |