С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/50: Рейтинг темы: голосов - 50, средняя оценка - 4.98
1 / 1 / 0
Регистрация: 30.06.2011
Сообщений: 4

Метод Readkey и распознавание русских символов

30.06.2011, 11:50. Показов 10555. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю простую задачу: читаю в консоли клавишу с помощью метода ReadKey() и добавляю
полученный символ в строковую переменную. Вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
ConsoleKeyInfo keyInfo = new ConsoleKeyInfo();
string str = null;
 
while (true)
{
   keyInfo = Console.ReadKey();
   if (keyInfo.Key == ConsoleKey.Enter)
       break;
   str += keyInfo.KeyChar;
                
}
Console.WriteLine("\n{0}",str);
С латинскими символами проблем нет, а вместо русских - выдает знаки вопроса и при вводе и при выводе.
В чем дело не могу понять.
Попытки подключить кодовую страницу:

C#
1
Console.OutputEncoding = Encoding.GetEncoding(1251);
или получить строку из набора байт, соответствующих введенным символам:

C#
1
string res = Encoding.GetEncoding(1251).GetString(Encoding.Default.GetBytes(str.ToCharArray()));
ни к чему хорошему не приводят.

Помогите, пожалуйста!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2011, 11:50
Ответы с готовыми решениями:

Распознавание русских букв консолью
Доброго времени суток, форумчане! У меня такая проблема. Я бы хотел написать программу с паролем, которая при вводе верного продолжает...

Масив и ReadKey!)Задача состоит в следующем:есть множество символов...
Задача состоит в следующем:есть множество символов,к примеру А=(z,q,t,j,l),нужно написать программу,которая будет делать следующее: ...

Как настроить ввод русских символов и в дальнейшем вывод этих символов
Подскажите как в этом коде настроить ввод русских символов и в дальнейшем вывод этих символов. Данный код выводит лишь всякую ерунду место...

7
1 / 1 / 0
Регистрация: 30.06.2011
Сообщений: 4
01.07.2011, 13:39  [ТС]
В твоей программе: ввожу английские в нижнем регистре, а они - заглавные ...и это понятно!

Фишка в том, что мне надо испльзовать не Key а KeyChar (туда попадают символы, а не клавиши),
а для этого надо вводить структуру ConsoleKeyInfo.

Моя задача: обработка введенного с клавиатуры пароля, а не просто контроль нажатия клавиш

Проблема в том, что метод ReadKey(false) при считывании русского символа выдает знак вопроса,
что означает: текущая кодировка не знает такого кода. Но не факт, что проблема заключается в
кодировке, потому что метод ReadLine прекрасно читает русские символы и отображает их корректно.

Как у тебя работает именно мой код?
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
01.07.2011, 16:10
Моя задача: обработка введенного с клавиатуры пароля, а не просто контроль нажатия клавиш
Когда вводят пароли не отображают символы. Обычно это звездочки.
0
60 / 60 / 13
Регистрация: 23.04.2011
Сообщений: 110
01.07.2011, 16:27
Цитата Сообщение от Edison Посмотреть сообщение
Точно так же как и у тебя. Вряд ли ты поймаешь кириллицу в консоли.
У меня нормально работает. Консоль использует старую дос кодировку cp866.

можно попробовать:
C#
1
2
Console.InputEncoding = Encoding.GetEncoding(866);
Console.OutputEncoding = Encoding.GetEncoding(866);
В моей системе корректно отображается (система русскоязычная).
0
1 / 1 / 0
Регистрация: 30.06.2011
Сообщений: 4
01.07.2011, 16:44  [ТС]
Цитата Сообщение от Петррр Посмотреть сообщение
Когда вводят пароли не отображают символы. Обычно это звездочки.
А анализируют символы
0
1 / 1 / 0
Регистрация: 30.06.2011
Сообщений: 4
13.07.2011, 14:19  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ConsoleKeyInfo keyInfo = new ConsoleKeyInfo();
string str = null;
while (true)
{
    keyInfo = Console.ReadKey();
    if (keyInfo.Key == ConsoleKey.Enter)
        break;
    str += keyInfo.KeyChar;                
}
char[] ch = str.ToCharArray();
byte[] b = Encoding.GetEncoding(1200).GetBytes(ch);
byte[] b1 = new byte[b.Length / 2];
for (int i = 0; i < b1.Length; i++)
    b1[i] = b[i * 2];
string str2 = Encoding.GetEncoding(866).GetString(b1);
и в str2 попадают корректные русские символы.
А вопросики при вводе можно закрывать звездочками.
1
Заблокирован
13.07.2011, 18:01
Цитата Сообщение от avt01 Посмотреть сообщение
А вопросики при вводе можно закрывать звездочками
А можно и
C#
1
 keyInfo = Console.ReadKey(true);
0
16 / 0 / 0
Регистрация: 23.02.2019
Сообщений: 107
17.06.2019, 14:05
Всего один вопрос меня интересует:
Цитата Сообщение от avt01 Посмотреть сообщение
обработка введенного с клавиатуры пароля
Кто делает пароли из кириллицы? Не считается ли странным тот факт, что используются только латинские буквы, цифры и некоторые символы. Если используется уловка вроде, ты печатаешь русские слова на английской раскладке, тогда разговор другой.

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

Лучше всего хранить пароли согласно правилу, описанному выше, и хранить их не как пароли, а как хэш-суммы. После ввода пароля преобразовывать его в хеш-сумму и сравнивать с уже сохраненным паролем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2019, 14:05
Помогаю со студенческими работами здесь

Чтение русских символов. Отрицательные значения у символов
Добрый вечер. Считую файл .txt. Но русские буквы получают отрицательное значение. И в итоге при попытке перевести в String не распознаются....

Перевести строку, состоящую из русских символов в строку из латинских символов, используя translit
Надо написать программу, которая переводит строку, состоящую из русских символов в строку из латинских символов, используя таблицу...

Оптическое распознавание символов
Доброе время суток. Стоит задача содрать текст с фото. Не знаю с какой стороны подступиться.Кто имел опыт, поделитесь пожалуйста. Куда...

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

Функции. Распознавание символов
Распознавание символов. Написать функцию, которая возвращает 1, если символ, полученный функцией в качестве аргумента, является гласной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru