а есть ли здесь знатоки C#?
Всем привет! Вопрос сложный, потому длинный:)
код файла:
string s = Console.ReadLine()!;
Console.WriteLine(s);
string s1 = "qwertyйцукенгqwerty";
Console.WriteLine(s1);
Казалось бы, чего проще? Консольный ввод сроки, присвоение значение переменной, вывод в консоль - первые две строки. Объявление строковой переменной и присвоение ей значения, потом вывод в консоль - третья и четвертая строка.
Казалось бы - где здесь может быть подвох?
Но всё не так просто:) Вдруг перестала работать кириллица - возможно из-за установленных и снесенных штатно C Builder и/или Power Shell, которые не виндусовый, а именно такой.
Как проявляется:
во всех случаях в консоль вводится строка "qwertyйцукенгqwerty". Предполагается, что на консоль должно вывестись две строки "qwertyйцукенгqwerty" одна под другой, но не тут то было:)
В VS Code выводится:
qwertyqwerty
qwertyйцукенгqwerty
Причем вычисление длины первой и второй строки - корректные, то есть 19
В Visual Studio:
qwerty qwerty
qwertyйцукенгqwerty
Если запустить exe из проекта:
qwerty qwerty
qwertyйцукенгqwerty
Пробовал переводить в байты и обратно. Для кириллицы получаем в байтах \0, при обратном переводе в строку получаем ничего:)
сам dotnet удалял, заново ставил - не помогает
Пробовал вместо русского вводить другие разные языки. Сербский, украинский - поведение аналогично русскому. Венгерский - аналогично английскому. Корейский - в первой строке вместо пропуска символов - знаки вопроса.
Нашел в инете решение:
"Внутри строки в нынешнем шарпе хранятся в utf-16, а в консоли - в utf-8.
чтобы работало, надо указать явно кодировку utf-16:
Console.InputEncoding = System.Text.Encoding.GetEncoding("utf-16");"
Попробовал - помогает, но вынужден во всех файлах прописывать эту строку.
А теперь, внимание, вопрос!
Что и где прописать, чтобы во всех редакторах во всех вновь создаваемых файлах всё работало и не нужно было прописывать эту строку?