Подскажите, пожалуйста, начинающему программистику,
как решить проблему с языком при запуске программы, вместо русского отображаются иероглифы.
В интернете вроде есть советы, но мне надо пошагово это разобрать.
Заранее благодарна.
Подскажите, пожалуйста, начинающему программистику,
как решить проблему с языком при запуске программы, вместо русского отображаются иероглифы.
В интернете вроде есть советы, но мне надо пошагово это разобрать.
Заранее благодарна.
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
26 сентября 2008 в 22:00
Анна Дмитриева, почитайте про исключения и конструкции try/catch try/finally в книжках. Чтобы на пальцах это не объяснять.
26 сентября 2008 в 22:00
Ваш пример должен выглядеть так:
class Example
{
public static void main (String args [])
{
try{
String msg = "Это сообщение на русском языке";
System.out.write(msg.getBytes("Cp866"));
}
catch(Exception err){
err.printStackTrace();
}
}
}
26 сентября 2008 в 21:02
ну я и не настаиваю))))можно и в try/catch
26 сентября 2008 в 20:04
Спасибо всем за советы. буду изучать на выходных.
и еще вопрос – что такое "заключить в try-catch"?
26 сентября 2008 в 18:00
По моему, указывать в процедуре верхнего уровня, что она выбрасывает исключение – плохой тон. Все исключения должны отлавливаться и обрабатываться в рамках приложения.
26 сентября 2008 в 17:05
Также можно указать после main, что она может генерироватьисключение:
public static void main(String[] args) throws Тип_Исключения {
}
или как было написано выше – заключить весь код mainвtry/catch
26 сентября 2008 в 13:00
Тело main нужно заключить в try-catch, поскольку getBytes может выбрасывать исключение по поводу неподдерживаемой кодировки. Точное имя не помню, но оно должно быть в сообщении об ошибке.
26 сентября 2008 в 10:02
Понятно.
-Dfile.encoding=Cp866сработало. Это порадовало.
А вот предложенная хитрость выдает ошибку.
Вот элементарный текст.
class Example
{
public static void main (String args [])
{
String msg = "Это сообщение на русском языке";
System.out.write(msg.getBytes("Cp866"));
}
}
Выдает 2 ошибки и указывает на скобки в последней строчке.
хм….
26 сентября 2008 в 9:00
Не поможет. Проблема не в том, в какой кодировке сохранены исходные коды. Вопрос в том, как внутреннее представление строки передаётся на устройство вывода (на консоль).
В Java приложении перекодировка при выводе на внешнее устройство определяется свойством Java машины file.encoding. По умолчанию значение этой переменной на Российской локали "Cp1251". А ДОС консоль имеет кодовую страницу ОЕМ Cp866.
На самом деле нативная программа, написанная на С++ или Delphi будет иметь теже проблемы с выводом на консоль. Нужно будет перед каждым выводом текста применять перекодировку AnsiToOem.
26 сентября 2008 в 8:04
Иван Юрченко,
я в обычном Блокноте сохраняла в UTF-8 и никакого эффекта. поможет ли это в notepad ++?
25 сентября 2008 в 22:05
Все равно советую работать в IDE так как это проще чем в блокное по ряду следующих причин:
1)Подсветка синтаксиса
2)Intellisence
3)Удобный интерфей
25 сентября 2008 в 22:05
>> Иван Юрченко,
>> а какую все таки кодировку надо выбирать?
UTF-8
25 сентября 2008 в 22:04
Иван Юрченко,
а какую все таки кодировку надо выбирать?
Александр Чигринец,
а эта подмена – это хорошо или плохо?
25 сентября 2008 в 22:04
Ну как сказать… Смотря для чего. Если нужно бысть посмотреть на результаты простенькой программки, то хорошо. Вот для начинающих хорошо. С другой стороны, запустив отлаженную, вроде бы, задачу в реальной консоле, можно получить тот самый эффект, что заставил вас открыть эту тему.
25 сентября 2008 в 22:00
Notepad++. Маленький, легкий, с подстветкой синтаксиса и выбором кодировки.
25 сентября 2008 в 22:00
Да, первый вариант – в командной строке. На самом деле Всяческие IDE вроде IntelliJ Idea или Eclipse подменяют DOS консоль своей, с другой, не OEM кодировкой.
На самом деле перекодировка при вводе/вывода – всегда узкое место.
25 сентября 2008 в 21:05
Есть два варианта:
1) Указать при вызове java ключ -Dfile.encoding=Cp866
2) Выводить строку не через Systm.out.println, а несколько более хитро:
String msg = "Это сообщение на русском языке";
System.out.write(msg.getBytes("Cp866"));
25 сентября 2008 в 21:05
странно
у меня всегда русскиц нормально отбражался кода я на Java писал
Попробуйте писать не в блокноте а в какой-то IDE – Eclipse, Net Beans
25 сентября 2008 в 21:05
второй вариант понятен, но неужели так надо писать всегда, когда необходимо вывести на экран строку на русском?
первый вариант -Dfile.encoding=Cp866 енто в командной строке выводить?
25 сентября 2008 в 21:05
Алексей Гончар,спасибо. попробую разобраться.
25 сентября 2008 в 21:01
я набираю код в Блокноте и сохраняю в кодировке ANSI. и пробовала в Юникод. ничего….=(
в инете вычитала про некий файлnative2ansi и даже его нашла. но что с ним делать так и не сообразила.
25 сентября 2008 в 21:00
Вопрос – в какой кодировке набран код?