Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Выводит на консоль символы вместо кириллицы.

#c_sharp




Хотелось бы навсегда решить эту проблему, а то для ее лечения я каждый раз вставляю
это //Console.OutputEncoding = Encoding.UTF8
    


Ответы

Ответ 1



Ситуация обстоит следующим образом: в качестве кодировки по умолчанию в вашей системе установлена 437. Это стандартная кодировка, разработанная в IBM для самых первых персоналок IBM PC предназначенных для США; в целях совместимости дожившая до наших времён. Она содержит только символы английского алфавита и некоторые греческие буквы. Она не содержит символы европейских языков (с умляутами и штрихами), и тем более не содержит символов кириллицы. Так что, похоже, у Вас американская либо международная версия Windows. Для того, чтобы показывать русский текст (кириллицу) необходимо переключиться на кодировку 866 (DOS), 1251 (Windows) или 65001 (UTF-8). Последняя кодировка универсальнее, поскольку позволяет показывать также и символы других алфавитов, не только русского и английского. Вы можете переключить язык даже в английской версии Windows с помощью команды chcp. Однако, это не всегда помогает, поскольку для отображения Unicode-символов необходим шрифт, содержащий глифы для этих символов. То есть помимо кодовой страницы для консоли необходимо установить также шрифт, например Lucida Console, вместо Terminal. В любом случае, установка шрифтов и кодовой страницы — прерогатива всё-таки пользователя компьютера, а не разработчика программы. Разработчик (то есть Вы) со своей стороны можете сделать следующее: Вынести текст всех сообщений в отдельный файл ресурсов. В этом файле подготовить все сообщения на английском языке. Это будут ресурсы по умолчанию. Подготовить второй файл ресурсов, куда сохранить сообщения на русском языке. После этого в английской, международной и прочих не-русских версиях программа будет показывать сообщения на английском. В русской версии Windows, где выбрана культура ru-ru и установлена кодировка CP1251 или CP65001 — программа будет выводить сообщения на русском. Пользователи-французы, итальянцы, японцы — смогут подготовить ресурсы на своём языке, переведя их с английского. Эти ресурсы могут быть скомпилированы в DLL. Если скопировать эту DLL в каталог программы, она будет показывать сообщения например на итальянском в итальянской версии Windows. Замечу, что для этого не нужно иметь исходного кода Вашей программы, и вообще, от Вас не потребуется ничего — пользователю потребуется EXE или DLL с текстами по-умолчанию, чтобы сделать свой перевод этих текстов. Выбор английского в качестве языка по умолчанию хорош тем, что этот язык по историческим причинам поддерживается всеми версиями Windows (и не только Windows).

Ответ 2



Сам файл "program.cs" сохраняется по умолчанию в UTF-8, а кодировка консоли обычно chcp 1251 поэтому такая проблема. Можно сменить кодировку консоли по умолчанию и тогда не придется в коде ничего писать, однако на другой машине проблема опять даст о себе знать, поэтому как уже сказали в комментарии, единственное правильное решение это Console.OutputEncoding = Encoding.UTF8

Ответ 3



Если нужен просто вывод русских букв, то поменяйте у себя язык по умолчанию для не-юникодных программ: Control Panel / Region / Administrative tab / Change System Locale. Выберите там Russian. Это аналогично ручному вызову chck 866. Скорее всего эта настройка была включена у вас в 7-ке. Странно, что слетела при апгрейде. Если нужен именно Unicode (chcp 65001), то можно задать его как кодовую страницу по умолчанию в реестре. Честно скопировано с enSO: Reg file Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Console] "CodePage"=dword:fde9 Command Prompt REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 0xfde9 PowerShell sp -t d HKCU:\Console CodePage 0xfde9 Cygwin regtool set /user/Console/CodePage 0xfde9 Но все это сработает только на вашей машине. так что лучше на всякий случай писать Console.OutputEncoding = Encoding.UTF8

Комментариев нет:

Отправить комментарий