Re: Как вывести русские буквы в консоль?
От: Sinix  
Дата: 18.03.14 08:23
Оценка: 15 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Понимаю, что вопрос идиотский и много раз обсуждался по всему интернету, но вот не получается почему-то...


MaLS уже ответил, дополню:

В теории достаточно Console.OutputEncoding = System.Text.Encoding.Unicode
+ вот тут советуют поменять шрифт в консоли.
Re: Как вывести русские буквы в консоль?
От: MaLS Россия https://github.com/maliutin
Дата: 18.03.14 08:07
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>в чем может быть дело?

В вашем понимании термина кодировка.

И так, выполнив ваш код вы увидели

кракозябры

А вы не задались вопросом почему их ровно в два раза больше чем букв в слове "тест"?

Далее.

Записав код

var fromEncodind = Encoding.Unicode;

подразумевает, что будет работа с кодировкой Юникод, т.е. под значение каждого символа отводится 2 байта.
Вызвав:
var bytes = fromEncodind.GetBytes(s);

получается соответствующий байт массив:

bytes: new byte[] {66, 4, 53, 4, 65, 4, 66, 4}

где

т: new byte[] {66, 4}
е: new byte[] {53, 4}
с: new byte[] {65, 4}
т: new byte[] {66, 4}

далее используя

var toEncoding = Encoding.GetEncoding(866);


подразумеваете, что будете использовать кодировку CP866, в которой для значения каждого символа выделяется один байт. И используя
toEncoding.GetString(bytes);

получаем:

66: B
4: ♦
53: 5
4: ♦
65: A
4: ♦
66: B
4: ♦


Результат закономерен.
----
"Ответить на вопрос — значит согласиться с правильностью его постановки.", Карстен Бредемайер
Как вывести русские буквы в консоль?
От: Аноним  
Дата: 18.03.14 06:18
Оценка:
Всем привет!

Понимаю, что вопрос идиотский и много раз обсуждался по всему интернету, но вот не получается почему-то...
Windows 7 x64, русская
NET Framework 4.0 (тоже, вроде, локализованный)
VS 2012, английская

Простейшее консольное приложение получает exception e и выводит его сообщение в консоль с помощью Console.WriteLine(e.Message).
Строка сообщения русская, как и все в NET — в Unicode; кодировка консоли (Console.OutputEncoding) — 866.

Классический код почему-то не срабатывает:
private static string ToConsole(string s)
{
    var fromEncodind = Encoding.Unicode; //из какой кодировки
    var bytes = fromEncodind.GetBytes(s);
    var toEncoding = Encoding.GetEncoding(866); //в какую кодировку
    return toEncoding.GetString(bytes);
}

если просто выводить русский текст Console.WriteLine("тест") — тоже выводятся кракозябры...
раньше вроде проблем с консолью таких не было.
в чем может быть дело?
Re[2]: Как вывести русские буквы в консоль?
От: Аноним  
Дата: 18.03.14 08:58
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Аноним, Вы писали:


А>>Понимаю, что вопрос идиотский и много раз обсуждался по всему интернету, но вот не получается почему-то...


S>MaLS уже ответил, дополню:


S>В теории достаточно Console.OutputEncoding = System.Text.Encoding.Unicode

теорию пробовал, не сработало.
S>+ вот тут советуют поменять шрифт в консоли.
точно, спасибо огромное
вспомнил, что уже наступал на эти грабли и лечилось заменой шрифта без изменения Console.OutputEncoding.
у меня стояли "точечные шрифты", с ними и не работало.
Re[2]: Как вывести русские буквы в консоль?
От: smeeld  
Дата: 18.03.14 09:01
Оценка:
Здравствуйте, MaLS, Вы писали:

Странно вообще, например, весь gnu stl-овский ввод/вывод
настроен на локаль с utf-8 кодировкой. Никаких проблем с
русскими текстами в консоли нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.