Здравствуйте, Аноним, Вы писали:
А>Понимаю, что вопрос идиотский и много раз обсуждался по всему интернету, но вот не получается почему-то...
MaLS уже ответил, дополню:
В теории достаточно Console.OutputEncoding = System.Text.Encoding.Unicode
+
вот тут советуют поменять шрифт в консоли.
Здравствуйте, Аноним, Вы писали:
А>в чем может быть дело?
В вашем понимании термина
кодировка.
И так, выполнив ваш код вы увидели
кракозябры
А вы не задались вопросом почему их ровно в два раза больше чем букв в слове "тест"?
Далее.
Записав код
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: ♦
Результат закономерен.
Всем привет!
Понимаю, что вопрос идиотский и много раз обсуждался по всему интернету, но вот не получается почему-то...
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("тест") — тоже выводятся кракозябры...
раньше вроде проблем с консолью таких не было.
в чем может быть дело?
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Понимаю, что вопрос идиотский и много раз обсуждался по всему интернету, но вот не получается почему-то...
S>MaLS уже ответил, дополню:
S>В теории достаточно Console.OutputEncoding = System.Text.Encoding.Unicode
теорию пробовал, не сработало.
S>+ вот тут советуют поменять шрифт в консоли.
точно, спасибо огромное
вспомнил, что уже наступал на эти грабли и лечилось заменой шрифта без изменения Console.OutputEncoding.
у меня стояли "точечные шрифты", с ними и не работало.