| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Прокоментировать часть кода |
| Автор: Golovastik 3.1.2011, 18:25 | ||
Прокоментируйте вот этот код, чего не очень ясен.
Добавлено через 1 минуту и 21 секунду Переменной под названием consoleEncoding мы присваиваем что? |
| Автор: SoulSeeker 3.1.2011, 18:30 | ||
Текущую кодировку консоли системы. |
| Автор: Golovastik 3.1.2011, 18:39 | ||
Обязательно ли конструктору getProperty передавать значение строковое consoleEncoding?
Это мы делаем из-за того что переменная типа Стринг названа consoleEncoding? |
| Автор: SoulSeeker 3.1.2011, 18:50 |
| Это не конструктор, а статичный метод. Строка "consoleEncoding" - имя свойства виртуальной машины. |
| Автор: Golovastik 3.1.2011, 19:01 |
| То есть мы пишем строку: "consoleEncoding" не из-за того что переменная типа string названа также? |
| Автор: SoulSeeker 3.1.2011, 19:09 |
| Нет, это просто считывание свойства по его названию. Например, как из ini файла. Тут может гуру java-машины подскажут, как там свойства хранятся. |
| Автор: Golovastik 3.1.2011, 19:41 | ||
Это считывание свойства из класса System по его названию? то есть в классе System есть объявленное свойство с именем consoleEncoding в который передаётся значение кодировки через метод getProperty? |
| Автор: mgarin 3.1.2011, 20:13 | ||||||
Давайте с начала...
Через данный вызов, как уже было сказано, происходит считывание значения параметра "consoleEncoding". Пишите Вы конкретно "consoleEncoding" потому, что вам нужно узнать "кодировку консоли" (кэп, знаю). Например, если бы вам нужно было узнать версию Java-машины - вы бы сделали вот так:
Если вы вообще ничего не передадите как параметр (или пустой текст) Вы получите ошибку (еще при компилляции) или же проблемы при исполнении (в виде возврата null как результата, например). Откуда берется значение для указанного параметра? Ответ более чем полностью приведен в описании метода:
Добавлено через 2 минуты и 9 секунд Т.е. в итоге значение берется из некого системного хранилища/хранилища java-машины. Могу предположить, что при запуске jvm они все считываются в некую мапу и там хранятся до завершения работы. |
| Автор: SoulSeeker 3.1.2011, 20:15 | ||
Опять нет. Свойства не хранятся в коде. Они лежат вне программы - в виртуальной машине и ОС.
Вот тут кратко и понятно: http://www.herongyang.com/Java/System-JVM-and-OS-System-Properties.html |
| Автор: Golovastik 3.1.2011, 21:05 | ||||
А это само свойство находится в классе System? Оно находится в этом классе,в него виндоус отправляет кодировку, которая потом извлекается методом getProperty? Скажите, а если ОС Линукс, как постатвить условие, что если например в ОС не установлена кодировка CP866 установить её?
|
| Автор: nc30 3.1.2011, 21:32 | ||||||||||
Чтобы у вас не было путаницы, я поменял название переменной (смысл не изменился)
Golovastik, кстати, вывести полный список системных свойств довольно легко. Поместите в ваш код следующие строки:
Видимо, идея автора приведенного вами кода была в смене кодировки стандартного потока вывода на другую. Например, чтобы метод System.out.println() делал вывод в иной кодировке (значение которой, как предполагается, задано свойством с именем consoleEncoding).
У себя в WinXP я свойства с таким ключом не нашел. Поэтому в моем случае как-раз таки возвращается null. Может быть в Linux есть свойство с таким именем. Как проверить? См. выше про печать списка свойств. |
| Автор: Golovastik 3.1.2011, 23:15 | ||||
Попробовал сделать русский ввод, не получается, только вывод русский, как сделать ввод ан русском языке?
Результат:
|
| Автор: Temdegon 3.1.2011, 23:41 | ||||
Потому что нужно указать кодировку ввода.
Какую именно кодировку указывать - я не знаю. Если запускаю из нетбинса, то все правильно отображает с такими настройками:
Если запустить из виндовой консоли - то отображает криво. Как ее правильно определить в рантайме, что бы работало везде и всегда - понятия не имею. Буду благодарен за подсказку. |
| Автор: nc30 4.1.2011, 09:47 |
| Спасибо Skipy за http://www.skipy.ru/technics.html#io посвященных вводу-выводу, кодировкам и т. п. |
| Автор: Golovastik 6.1.2011, 15:40 | ||
Вот так тоже не хочет, вводить русским в командной строке.
|
| Автор: priam220 6.1.2011, 17:25 | ||||
В JDK6 появился класс Console, позволяющий решить вопросы с кодировкой:
Вывод:
|
| Автор: nc30 7.1.2011, 07:51 | ||||||
Кодировку потока out для консоли тоже нужно переустановить
UPD: Не заметил последнего поста |
| Автор: Golovastik 8.1.2011, 20:47 | ||
Да вы не поняли меня, вывод делается на русском, после вот этой строки.
Мне нужен ВВОД на русском Кто-нибудь знает? |
| Автор: dorogoyIV 8.1.2011, 21:07 | ||
для GUI
для консоли - лень возиться а оно тебе надо?! |
| Автор: Golovastik 8.1.2011, 21:21 | ||
Мне нужно сделать консольный ввод и вывод и то и другое. Вывод вот так:
А ввод как сделать? |
| Автор: dorogoyIV 8.1.2011, 21:27 |
подключиться к ОС переключить раскладку клавы ... далее по моему не нужно рассказывать |
| Автор: Golovastik 8.1.2011, 21:33 |
| Подскажите, как в коде это выразить, так образно я тоже понимаю что это надо сделать. |
| Автор: Golovastik 8.1.2011, 22:25 |
| Если кто-нибудь знает как кодом написать чтоб был русский ввод, напишите. Заранее благодарю. |
| Автор: mgarin 9.1.2011, 00:54 | ||
Смотря, опять же, что Вы под этим подразумеваете... Если переключение раскладки в ОС - то конкретно на Java - никак. Хоть этот функционал есть в каждой ОС - это нативная вещь, а Java и нативные вещи - несовместимые понятия... Даже распознание языка ввода работает не везде и не всегда, а уж переключение вообще только в мечтах. Я давно искал решения этого вопроса, так что точно могу сказать - без нативных средств (т.е. скажем отдельного приложения на C, производящего переключение раскладки по запросу Java-приложения) вам не обойтись, а с этим я не думаю, что Вы будете сейчас заморачиваться. Если же проблема в кодировке - вроде выше уже приводили решения проблемы?.. Они не подошли/не работают? P.S. Я вообще, впринципе, не особо понял в чем проблема - неужели Вы в консоли не можете поменять руками раскладку? И вводить далее на русском... Если же в итоге в приложении Вы получаете что-то не то - то это уже проблемы кодировки при считывании ввода - о том как их решить выше, вроде как, разъяснили |
| Автор: Golovastik 9.1.2011, 02:44 | ||||
| Я хочу написать банальное. ВВедите текст. Человек вводит на русском текст, а потом оператором вывода, выводится на русском текст. А получается вот такое:
И при выводе слова Привет я вижу такое:
Как сделать ,чтоб такого вывод не происходило. Напишите кодом пожалуйста. |
| Автор: mgarin 9.1.2011, 03:29 | ||||
| Сразу бы так расписал, было бы гораздо быстрее решить проблему Попробовал разные варианты - вот так (лично у меня) работает:
Собственно, на выходе вышло все как надо:
Т.е. вам нужно просто корректно задать кодировку для ридера строки, ничего волшебного P.S. Единственная оговорка - я проверял в IDEA IDE. Не уверен, что она не подмешивает чего эдакого при выводе Хотя, впринципе, не должна. Попробуйте, отпишитесь если что не пашет |