Проблема с пространством имен .Net Encoding? - PullRequest
1 голос
/ 05 января 2011

Я только что столкнулся с проблемой при попытке написать небольшую DLL-библиотеку шифрования для нашей компании (когда мне впервые пришлось это делать).

Если я использую следующий код для извлечения байта [] из строки (в моем случае это знак британского фунта £), а затем использую ту же область .Net Framework, чтобы получить символ [] для байта [] Я получаю знак вопроса вместо ожидаемого £!

Может кто-нибудь объяснить мне, почему это так?

byte [] asciiBytes = Encoding.ASCII.GetBytes ("£"); Console.WriteLine (Encoding.ASCII.GetChars (asciiBytes) .ToString ());

1 Ответ

3 голосов
/ 05 января 2011

Вы пытаетесь использовать кодировку ASCII, но знак фунта отсутствует в ASCII. Кодировка не может иметь дело с символом, поэтому она использует закодированную форму "?" как индикатор того, что что-то не так.

Я предлагаю вам использовать вместо UTF-8. Все символы Unicode могут быть представлены в UTF-8, и это эффективно для действительно строк ASCII (которые очень распространены).

Следует помнить одну вещь: шифрование обычно работает с произвольными двоичными данными, а результат - это произвольные двоичные данные. Не пытайтесь преобразовать результаты шифрования обратно в строку, используя что-то вроде Encoding.UTF8.GetString(bytes) - это приведет к потере данных, поскольку произвольные двоичные данные почти наверняка не будут действительными в кодировке UTF-8 последовательность символов. Если вам нужен строковый результат, используйте кодировку base64: Convert.ToBase64String(bytes).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...