Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прокоментировать часть кода 
:(
    Опции темы
priam220
Дата 6.1.2011, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



В JDK6 появился класс Console, позволяющий решить вопросы с кодировкой:

Код

 public class MyClass{

    public static void main(String [] str){
        Console console = System.console();
        String strin = console.readLine();
        console.printf(strin);
    }
}


Вывод: 
Код

D:\Workspaces\workspace1\_example_proj\bin>java default_pack.MyClass
ыыы
ыыы
D:\Workspaces\workspace1\_example_proj\bin>


Это сообщение отредактировал(а) priam220 - 6.1.2011, 17:27
PM MAIL   Вверх
nc30
Дата 7.1.2011, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Цитата(Golovastik @ 6.1.2011,  15:40)
Вот так тоже не хочет, вводить русским в командной строке.
 
Код

System.setIn(new PrintStream(System.in,true,"Cp866"));

Кодировку потока out для консоли тоже нужно переустановить
Код

System.setOut(new PrintStream(System.out, true, "Cp866"));


UPD:
Не заметил последнего поста smile

Это сообщение отредактировал(а) nc30 - 7.1.2011, 07:55
PM MAIL   Вверх
Golovastik
Дата 8.1.2011, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: 1
Всего: 0



Да вы не поняли меня, вывод делается на русском, после вот этой строки.
Код

     System.setOut(new PrintStream(System.out,true,"Cp866"));


Мне нужен ВВОД на русском 
Кто-нибудь знает?
PM MAIL   Вверх
dorogoyIV
Дата 8.1.2011, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



для GUI
Код

  Locale locale = new Locale("ru", "RU");
  getInputContext().selectInputMethod(locale);


для консоли - лень возиться  smile 
а оно тебе надо?!  smile 
PM MAIL   Вверх
Golovastik
Дата 8.1.2011, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: 1
Всего: 0



Мне нужно сделать консольный ввод и вывод и то и другое. Вывод вот так:
Код

System.setOut(new PrintStream(System.out,true,"Cp866"));


А ввод как сделать?
PM MAIL   Вверх
dorogoyIV
Дата 8.1.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(Golovastik @  8.1.2011,  21:21 Найти цитируемый пост)
А ввод как сделать?

подключиться к ОС
переключить раскладку клавы
...
далее по моему не нужно рассказывать  smile 
PM MAIL   Вверх
Golovastik
Дата 8.1.2011, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: 1
Всего: 0



Подскажите, как в коде это выразить, так образно я тоже понимаю что это надо сделать.
PM MAIL   Вверх
dorogoyIV
Дата 8.1.2011, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(Golovastik @  8.1.2011,  21:33 Найти цитируемый пост)
Подскажите, как в коде это выразить, так образно я тоже понимаю что это надо сделать.

ты хочешь всего и сразу!  smile 
что бы подключиться к ОС, одной Java мало.
для начинающего, я думаю не надо сразу лезть в эти дебри (JNI/JNA)

пиши в консоли в транслите!

PM MAIL   Вверх
Golovastik
Дата 8.1.2011, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: 1
Всего: 0



Если кто-нибудь знает как кодом написать чтоб был русский ввод, напишите.
Заранее благодарю.

Это сообщение отредактировал(а) Golovastik - 8.1.2011, 22:26
PM MAIL   Вверх
mgarin
Дата 9.1.2011, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Цитата(Golovastik @  8.1.2011,  22:25 Найти цитируемый пост)
Если кто-нибудь знает как кодом написать чтоб был русский ввод, напишите.
Заранее благодарю.


Смотря, опять же, что Вы под этим подразумеваете...

Если переключение раскладки в ОС - то конкретно на Java - никак.
Хоть этот функционал есть в каждой ОС - это нативная вещь, а Java и нативные вещи - несовместимые понятия...
Даже распознание языка ввода работает не везде и не всегда, а уж переключение вообще только в мечтах.
Я давно искал решения этого вопроса, так что точно могу сказать - без нативных средств (т.е. скажем отдельного приложения на C, производящего переключение раскладки по запросу Java-приложения) вам не обойтись, а с этим я не думаю, что Вы будете сейчас заморачиваться.

Если же проблема в кодировке - вроде выше уже приводили решения проблемы?.. Они не подошли/не работают?

P.S. Я вообще, впринципе, не особо понял в чем проблема - неужели Вы в консоли не можете поменять руками раскладку? И вводить далее на русском...
Если же в итоге в приложении Вы получаете что-то не то - то это уже проблемы кодировки при считывании ввода - о том как их решить выше, вроде как, разъяснили smile

Это сообщение отредактировал(а) mgarin - 9.1.2011, 00:57
PM MAIL WWW ICQ   Вверх
Golovastik
Дата 9.1.2011, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: 1
Всего: 0



Я хочу написать банальное. 
ВВедите текст. Человек вводит на русском текст, а потом оператором вывода, выводится на русском текст.
А получается вот такое:
Код


package javaapplication3;
import java.io.*;
 
class Main{
public static void main(String[] args) throws Exception{
System.setOut(new PrintStream(System.out,true,"Cp866"));
    BufferedReader obj = new BufferedReader(new InputStreamReader(System.in));
    String str;
    System.out.println("Введите текст");
    str = obj.readLine();
    System.out.println("Вы ввели: "+str);
}
 }
 


И при выводе слова Привет я вижу такое:
Код


Введите текст
привет
Вы ввели: ЇаЁў?в
 

Как сделать ,чтоб такого вывод не происходило.
Напишите кодом пожалуйста.
PM MAIL   Вверх
mgarin
Дата 9.1.2011, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Сразу бы так расписал, было бы гораздо быстрее решить проблему smile

Попробовал разные варианты - вот так (лично у меня) работает:
Код
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main2
{
    public static void main ( String[] args ) throws Exception
    {
        System.out.println ( "Введите текст" );

        BufferedReader obj =
                new BufferedReader ( new InputStreamReader ( System.in, "Windows-1251" ) );
        String str = obj.readLine ();

        System.out.println ( "Вы ввели: " + str );
    }
}


Собственно, на выходе вышло все как надо:
Код
Введите текст
abcde тест абвгде
Вы ввели: abcde тест абвгде


Т.е. вам нужно просто корректно задать кодировку для ридера строки, ничего волшебного smile

P.S. Единственная оговорка - я проверял в IDEA IDE. Не уверен, что она не подмешивает чего эдакого при выводе smile
Хотя, впринципе, не должна. Попробуйте, отпишитесь если что не пашет

Это сообщение отредактировал(а) mgarin - 9.1.2011, 03:37
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.