Ввод кириллицы с консоли
От: Аноним  
Дата: 29.01.08 14:16
Оценка:
Седующий кусок кода по моему замыслу дожен выводить то, что юзер вводит в консоли с клавиатурп. Для англицких букв так и есть, а вто с русской кодировкой — проблемы. То вопросительные знаки, то другая фигня выводится.

static void Main(string[] args)
{
  ConsoleKeyInfo cki;
  // Console.OutputEncoding = Encoding.GetEncoding(...);
  // Console.InputEncoding = Encoding.GetEncoding(...);
  do
  {
    cki = Console.ReadKey(true);
    // byte b = (byte)cki.KeyChar;
    // Console.Write(Convert.ToChar(b));
    Console.Write(cki.KeyChar);
  }
  while (cki.Key != ConsoleKey.Escape);
}


Снимать комментарии и задавать различные кодировки вместо "..." не помогает.
Чувствую, что проблема должна решаться просто, но как — голову сломал!
Варианты типа Console.WriteLine(Console.ReadLine()); работает нормально, но мне не подходит...
Что надо изменить в коде кроме кривизны моих рук?
Re: Ввод кириллицы с консоли
От: Аноним  
Дата: 29.01.08 15:44
Оценка:
Здравствуйте, Аноним, Вы писали:

так работает, но как-то это не правильно
byte[] bytes = Encoding.Unicode.GetBytes(new char[] { cki.KeyChar });
Console.Write(Console.OutputEncoding.GetString(new byte[] { bytes[0] }));
Re[2]: Ввод кириллицы с консоли
От: GlebZ Россия  
Дата: 29.01.08 16:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>так работает, но как-то это не правильно

А>
А>byte[] bytes = Encoding.Unicode.GetBytes(new char[] { cki.KeyChar });
А>Console.Write(Console.OutputEncoding.GetString(new byte[] { bytes[0] }));
А>

Вполне правильно. Только не OutputEncoding, а InputEncoding (хотя честно то это по барабану). То что KeyChar имеет тип char — это обманка. Он не перекодирует в Unicode. Там сидит CP866 из-за давнишней совместимости с DOS.
Ввод кириллицы с консоли
От: _Morpheus_  
Дата: 29.01.08 16:33
Оценка:
#Имя: FAQ.dotnet.readcyrillic
Здравствуйте, <Аноним>, Вы писали:

А>Чувствую, что проблема должна решаться просто, но как — голову сломал!

А>Варианты типа Console.WriteLine(Console.ReadLine()); работает нормально, но мне не подходит...
А>Что надо изменить в коде кроме кривизны моих рук?


    static void Main(string[] args)
    {
        ConsoleKeyInfo cki;
        do
        {
            cki = Console.ReadKey(true);
            char c = Console.InputEncoding.GetString(BitConverter.GetBytes(cki.KeyChar))[0];    // get unicode char (в соответствии с кодировкой ввода у консоли)...

            Console.Write(c);
        }
        while (cki.Key != ConsoleKey.Escape);
    }
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[3]: Ввод кириллицы с консоли
От: Аноним  
Дата: 29.01.08 18:19
Оценка:
Здравствуйте, GlebZ, Вы писали:

А>>так работает, но как-то это не правильно

А>>
А>>byte[] bytes = Encoding.Unicode.GetBytes(new char[] { cki.KeyChar });
А>>Console.Write(Console.OutputEncoding.GetString(new byte[] { bytes[0] }));
А>>

GZ>Вполне правильно. Только не OutputEncoding, а InputEncoding (хотя честно то это по барабану).
да, конечно InputEncoding, сначала пытался использовать I/OEncoding и конвертить а потом копи-пасте

GZ> То что KeyChar имеет тип char — это обманка. Он не перекодирует в Unicode. Там сидит CP866 из-за давнишней совместимости с DOS.

но там получается два байта, первый — сам символ в 866, а второй — 4.
"как-то это не правильно" потмоу что я просто забил на эти 4
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.