Нашел на просторах интернета сей сниппет. У меня почему то отображаются вопросики в результатах.
var unicodeString= "Привет";
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
byte[] unicodeBytes = unicode.GetBytes(unicodeString);
byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
В C# строки не имеют кодировки. А вот массив байт может являться представлением строки в той или иной кодировке. Поэтому вопрос о кодировке появляется только при превращении строки в набор байт или набора байт назад в строку (а также записи в файлы и другие потоки, которые тоже являются набором байт).
Поэтому перекодировать строку не нужно, и бессмысленно.
В вашем случае вы получаете байты строки "Привет"
в UTF-16 (переменная unicodeBytes
), затем перекодируете их в ASCII (переменная asciiBytes
). Проблема, однако, в том, что в кодировке ASCII вовсе нет кириллических символов, поэтому они заменяются на байты для знаков вопроса.
Далее вы декодируете дайте ASCII* в строку, и видите в ней закономерные знаки вопроса.
*кстати, это можно сделать и проще:
string asciiString = ascii.GetString(asciiBytes);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем привет! Вобщем, выпустил вчера первую игру в Play MarketЯ её скачал оттуда, запустил, нажал на кнопку Play и всё просто зависло