singlepost

Вопрос по Java << На главную или назад  

Подскажите, пожалуйста, начинающему программистику,
как решить проблему с языком при запуске программы, вместо русского отображаются иероглифы.
В интернете вроде есть советы, но мне надо пошагово это разобрать.
Заранее благодарна.

52 ответов в теме “Вопрос по Java”

  1. 22
    Александр Чигринец ответил:

    Анна Дмитриева, почитайте про исключения и конструкции try/catch try/finally в книжках. Чтобы на пальцах это не объяснять.

  2. 21
    Александр Чигринец ответил:

    Ваш пример должен выглядеть так:
    class Example
    {
    public static void main (String args [])
    {
    try{
    String msg = "Это сообщение на русском языке";
    System.out.write(msg.getBytes("Cp866"));
    }
    catch(Exception err){
    err.printStackTrace();
    }
    }
    }

  3. 20
    Алексей Гончар ответил:

    ну я и не настаиваю))))можно и в try/catch

  4. 19
    Анна Дмитриева ответил:

    Спасибо всем за советы. буду изучать на выходных.

    и еще вопрос – что такое "заключить в try-catch"?

  5. 18
    Александр Чигринец ответил:

    По моему, указывать в процедуре верхнего уровня, что она выбрасывает исключение – плохой тон. Все исключения должны отлавливаться и обрабатываться в рамках приложения.

  6. 17
    Алексей Гончар ответил:

    Также можно указать после main, что она может генерироватьисключение:
    public static void main(String[] args) throws Тип_Исключения {
    }

    или как было написано выше – заключить весь код mainвtry/catch

  7. 16
    Александр Чигринец ответил:

    Тело main нужно заключить в try-catch, поскольку getBytes может выбрасывать исключение по поводу неподдерживаемой кодировки. Точное имя не помню, но оно должно быть в сообщении об ошибке.

  8. 15
    Анна Дмитриева ответил:

    Понятно.
    -Dfile.encoding=Cp866сработало. Это порадовало.
    А вот предложенная хитрость выдает ошибку.
    Вот элементарный текст.
    class Example
    {
    public static void main (String args [])
    {
    String msg = "Это сообщение на русском языке";
    System.out.write(msg.getBytes("Cp866"));
    }
    }
    Выдает 2 ошибки и указывает на скобки в последней строчке.
    хм….

  9. 14
    Александр Чигринец ответил:

    Не поможет. Проблема не в том, в какой кодировке сохранены исходные коды. Вопрос в том, как внутреннее представление строки передаётся на устройство вывода (на консоль).
    В Java приложении перекодировка при выводе на внешнее устройство определяется свойством Java машины file.encoding. По умолчанию значение этой переменной на Российской локали "Cp1251". А ДОС консоль имеет кодовую страницу ОЕМ Cp866.
    На самом деле нативная программа, написанная на С++ или Delphi будет иметь теже проблемы с выводом на консоль. Нужно будет перед каждым выводом текста применять перекодировку AnsiToOem.

  10. 13
    Анна Дмитриева ответил:

    Иван Юрченко,
    я в обычном Блокноте сохраняла в UTF-8 и никакого эффекта. поможет ли это в notepad ++?

  11. 12
    Алексей Гончар ответил:

    Все равно советую работать в IDE так как это проще чем в блокное по ряду следующих причин:
    1)Подсветка синтаксиса
    2)Intellisence
    3)Удобный интерфей

  12. 11
    Ванько Родригез ответил:

    >> Иван Юрченко,
    >> а какую все таки кодировку надо выбирать?

    UTF-8

  13. 10
    Анна Дмитриева ответил:

    Иван Юрченко,
    а какую все таки кодировку надо выбирать?

    Александр Чигринец,
    а эта подмена – это хорошо или плохо?

  14. 9
    Александр Чигринец ответил:

    Ну как сказать… Смотря для чего. Если нужно бысть посмотреть на результаты простенькой программки, то хорошо. Вот для начинающих хорошо. С другой стороны, запустив отлаженную, вроде бы, задачу в реальной консоле, можно получить тот самый эффект, что заставил вас открыть эту тему. ;-)

  15. 8
    Ванько Родригез ответил:

    Notepad++. Маленький, легкий, с подстветкой синтаксиса и выбором кодировки.

  16. 7
    Александр Чигринец ответил:

    Да, первый вариант – в командной строке. На самом деле Всяческие IDE вроде IntelliJ Idea или Eclipse подменяют DOS консоль своей, с другой, не OEM кодировкой.

    На самом деле перекодировка при вводе/вывода – всегда узкое место.

  17. 6
    Александр Чигринец ответил:

    Есть два варианта:
    1) Указать при вызове java ключ -Dfile.encoding=Cp866
    2) Выводить строку не через Systm.out.println, а несколько более хитро:
    String msg = "Это сообщение на русском языке";
    System.out.write(msg.getBytes("Cp866"));

  18. 5
    Алексей Гончар ответил:

    странно
    у меня всегда русскиц нормально отбражался кода я на Java писал
    Попробуйте писать не в блокноте а в какой-то IDE – Eclipse, Net Beans

  19. 4
    Анна Дмитриева ответил:

    второй вариант понятен, но неужели так надо писать всегда, когда необходимо вывести на экран строку на русском?
    первый вариант -Dfile.encoding=Cp866 енто в командной строке выводить?

  20. 3
    Анна Дмитриева ответил:

    Алексей Гончар,спасибо. попробую разобраться.

  21. 2
    Анна Дмитриева ответил:

    я набираю код в Блокноте и сохраняю в кодировке ANSI. и пробовала в Юникод. ничего….=(
    в инете вычитала про некий файлnative2ansi и даже его нашла. но что с ним делать так и не сообразила.

  22. 1
    Ванько Родригез ответил:

    Вопрос – в какой кодировке набран код?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.