:: Не фоксом единым
Русские буквы в консольном приложении Core
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Захожу в VS 2017, выбираю "Файл \ Создать \ Проект \ Консольное приложение (.NET Core)", создаю проект. Вижу

Console.WriteLine("Hello World!");

Меняю на

Console.WriteLine("Привет, Мир!");
Console.ReadLine();

И любуюсь на

[attachment 27720 s1.png]

Как можно русифицировать консоль? Куда копать?
Ratings: 0 negative/0 positive
Re: Русские буквы в консольном приложении Core
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Полазил в свойствах консоли - чего либо нужного не нашёл. Понравилась надпись:

[attachment 27723 s2.png]
Ratings: 0 negative/0 positive
Re: Русские буквы в консольном приложении Core
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Наверное, сильно удивлю... Но посоветую выбрать "Использовать прежнюю версию консоли". Недавно сталкивался с проблемой работы консоли в Win 10 (хотя и по другому поводу). После того, как выбрал "Использовать прежнюю версию консоли", проблема исчезла. Карочи, не факт, что поможет это, но вдруг?
Ratings: 0 negative/0 positive
Re: Русские буквы в консольном приложении Core
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Не знаю, на сколько правильно, но вот так работает:

[attachment 27724 s4.png]
Ratings: 0 negative/0 positive
Re: Русские буквы в консольном приложении Core
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Simple777
Наверное, сильно удивлю...
Не удивил Прежде, чем сюда написать - по всякому пробовал. Увы, не помогло...

Можно ли как обойтись без этой строчки кода - например, что то указать в настройках проекта?
Ratings: 0 negative/0 positive
Re: Русские буквы в консольном приложении Core
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Console.OutputEncoding управляет кодировкой консоли, но...
По умолчанию в Core включена лишь поддержка юникодной, ASCII и ещё какой-то одной кодировки (таким нехитрым способом разработчики хотят "заставить всех быть счастливыми" - т.е. перейти на юникод в консоли). Поэтому когда код инициализации выбирает какую кодировку использовать для консоли (при этом он опирается прежде всего на системную локаль - и у тебя по идее "видит" что должна быть 866 кодовая страница), он не находит нужную и делает fallback до utf-8 (поскольку поддержки 866 или 1251 в системе "по умолчанию" НЕТ)

Через Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) можно добавить в коре все кодировки поддерживаемые в "полном" фреймворке, что по идее позволит работать с "классическими" кодировками в консоли.

Тут конкретно твой вопрос

Тут многа буков обсуждения и даже ссылка на коммит вводящий такое поведение (до того было ещё хуже - тупо эксепшн вываливался если консоль не настроена была на utf-8, ну или если не была подключена "CodePagesEncodingProvider" со всей прорвой поддерживаемых "классическим" фреймворком кодировок).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Русские буквы в консольном приложении Core
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
таким нехитрым способом разработчики хотят "заставить всех быть счастливыми" - т.е. перейти на юникод в консоли
Думал, что на какой то маленький косячок наткнулся, а тут - целый заговор однако...

Console.OutputEncoding = Console.OutputEncoding;
Прикольно. Надо будет в программу вставить.

Возможно, в Core 2.0 косяков будет меньше. А вообще - до 3-й версии, это всё "бета" А после 5-й опять переименуют и похерят совместимость....
Ratings: 0 negative/0 positive
Re: Русские буквы в консольном приложении Core
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Не, ну их мотивы в принципе понятны - хз как там реализуется вся эта "кодостраничная многоязычность" на линуксах - utf-8 то там ого-го как работает, и он даже "по умолчанию" установлен для той же консоли в большинстве современных дистрибутивов. А коре - это попытка отделить сиамского близнеца .NET от его второй половины (винды) и позволить жить самостоятельно. Mono, похоже, не очень справляется. А тут - можно сразу кучу устаревшей дряни выкинуть (таки для вновь-рождённых систем/языков через 10-15 лет жизни накапливается гигантский груз "ошибок проектирования", и так охота всё перечеркнуть и написать с нуля "чистый аки слеза ребёнка" проект с учётом накопленного опыта).

Не советовал бы применять именно такое переприсваивание - это очень уж корявый костыль (да, он выглядит как г*но, пахнет как г*но, а значит он и есть оно)... Лучше уж тупо utf-8 присваивать и получать идентичное поведение и для "полных" версий фреймворка. Ну или подключить весь "багаж" кодировок - но тут хз как это работает на линуксах. На винде то все nls давно уж встроены в систему, а что там на юниксах...
Впрочем, если для работы потребуется 1251 или 866 (например для входных/выходных файлов) - т.е. НЕ всё будет в юникоде работать, то, полагаю, без этого подключения по любому не обойтись...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Русские буквы в консольном приложении Core
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
(да, он выглядит как г*но, пахнет как г*но, а значит он и есть оно)...
Утиная типизация г-кода :xixi:
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 3 (Гостей: 3)

© 2000-2024 Fox Club 
Яндекс.Метрика