Как преобразовать ASCII в Unicode?

295
17 декабря 2017, 07:52

Нашел на просторах интернета сей сниппет. У меня почему то отображаются вопросики в результатах.

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);
Answer 1

В C# строки не имеют кодировки. А вот массив байт может являться представлением строки в той или иной кодировке. Поэтому вопрос о кодировке появляется только при превращении строки в набор байт или набора байт назад в строку (а также записи в файлы и другие потоки, которые тоже являются набором байт).

Поэтому перекодировать строку не нужно, и бессмысленно.

В вашем случае вы получаете байты строки "Привет" в UTF-16 (переменная unicodeBytes), затем перекодируете их в ASCII (переменная asciiBytes). Проблема, однако, в том, что в кодировке ASCII вовсе нет кириллических символов, поэтому они заменяются на байты для знаков вопроса.

Далее вы декодируете дайте ASCII* в строку, и видите в ней закономерные знаки вопроса.

*кстати, это можно сделать и проще:

string asciiString = ascii.GetString(asciiBytes);
READ ALSO
Приведение обобщенных типов

Приведение обобщенных типов

Есть задача приведения типов

223
Путь к файлу процесса c#

Путь к файлу процесса c#

Получаю список процессов

300
Unity3D Нужна помощь с игрой [требует правки]

Unity3D Нужна помощь с игрой [требует правки]

Всем привет! Вобщем, выпустил вчера первую игру в Play MarketЯ её скачал оттуда, запустил, нажал на кнопку Play и всё просто зависло

169