Если это вопрос и ответ «обмена знаниями», я думаю, что мы ищем что-то более глубокое. Также появляется быстрый поиск SO: stackoverflow.com/a/7368168/419
Kev
1
@Gnark Любая строка кодируется определенной базовой схемой кодирования битов. Будь то ASCII, UTF7, UTF8, .... Поставленный вопрос в лучшем случае неполон.
Лоренц Ло Зауэр
2
Спросите себя, вам действительно нужно это сделать? Помните, что base64 в первую очередь предназначен для представления двоичных данных в ASCII, для хранения в поле char в базе данных или отправки по электронной почте (где могут быть введены новые строки). Вы действительно хотите взять символьные данные, преобразовать их в байты, а затем преобразовать обратно в символьные данные, на этот раз не читаемые и без намека на то, какой была первоначальная кодировка?
bbsimonbb
Почему мы должны заботиться об оригинальной кодировке? Мы кодируем строку в байты, используя представление UTF8, которое может представлять все возможные строковые символы. Затем мы сериализуем эти данные, а на другом конце мы десериализуем эти данные и восстанавливаем ту же строку, которая у нас была изначально (строковый объект в любом случае не содержит информацию об используемой кодировке). Так почему же существует проблема, связанная с используемой кодировкой? Мы можем рассматривать это как проприетарный способ представления сериализованных данных, который нас не должен интересовать в любом случае.
Null проверяет наличие входных строк в обеих функциях, и решение является идеальным :)
Sverrir Sigmundarson
22
@SverrirSigmundarson: Это или сделать их методы расширения.
TJ Crowder
73
@SverrirSigmundarson - Почему проверка на ноль? Он не разыменовывает входную строку. Нулевые проверки должны предотвращать NullReferenceExceptionв вашем собственном коде, а не в чужом.
Кен
16
@ken А кто-то еще скажет: «Вы должны сообщать об ошибках только в своем собственном коде, а не в чужом», ссылаясь на принцип наименьшего удивления, приправленный «неудачей рано» и «правильной инкапсуляцией». Иногда это означает ошибки упаковки компонентов более низкого уровня, иногда что-то совсем другое. В этом случае я согласен с тем, что перенос ошибки разыменования определенно сомнителен (плюс мы все медленно соглашаемся с тем фактом, что null как концепция с самого начала является чем-то вроде хака), но мы все же можем увидеть некоторые эффекты в противном случае: имя параметра, указанное в исключении, может быть неверным, если его не проверять.
TNE
6
return System.Text.Encoding.UTF8.GetString (base64EncodedBytes, 0, base64EncodedBytes.Length); для Windows Phone 8
Стивен Золеко
46
Я делюсь своей реализацией с некоторыми полезными функциями:
использует методы расширения для класса кодирования. Обоснование заключается в том, что кому-то может потребоваться поддержка различных типов кодировок (не только UTF8).
Еще одним улучшением является изящный сбой с нулевым результатом для нулевого ввода - это очень полезно в реальных сценариях и поддерживает эквивалентность для X = decode (encode (X)).
Примечание: Помните, что для использования метода расширения вы должны (!) Импортировать пространство имен с usingключевым словом (в данном случае using MyApplication.Helpers.Encoding).
Возвращение nullв случае nullочень противоречивого поведения. Никакой другой .net API, который работает со строками, не делает этого.
t3chb0t
4
@ t3chb0t не стесняйтесь настроить его под свои нужды. Как то, как это представлено здесь, было приспособлено к нашему. Это не публичный API;)
andrew.fox
1
Разве вам теперь не нужно отправлять 2 переменные другой стороне в вашем общении (кому вы отправляете данные в кодировке base64)? Вам необходимо отправить как используемую кодировку, так и фактические данные base64? Не проще ли, если вы используете соглашение с обеих сторон, чтобы использовать одну и ту же кодировку? Таким образом, вам нужно будет только отправить данные base64, верно?
Младен Б.
38
Основываясь на ответах Эндрю Фокса и Себе, я перевернул их и сделал их строковыми расширениями вместо расширений Base64String.
Я бы добавил ParseBase64 (этот текст строки, Кодировка кодирования, out string decodedText) (чтобы заполнить исключение, если необходимо, и вызвал бы это в TryParseBase64
João Antunes
22
Небольшое изменение в ответе andrew.fox, так как строка для декодирования может быть неверной строкой в кодировке base64:
Онлайн инструменты не помогают в этой ситуации - он спрашивает, как его кодировать. Я часто задаюсь вопросом, почему люди говорят: «Зацените этот онлайн-инструмент!», Потому что ОП не запрашивал онлайн-инструмент: D
publicstaticclassBase64Url{publicstaticstringEncode(string text){returnConvert.ToBase64String(Encoding.UTF8.GetBytes(text)).TrimEnd('=').Replace('+','-').Replace('/','_');}publicstaticstringDecode(string text){
text = text.Replace('_','/').Replace('-','+');switch(text.Length%4){case2:
text +="==";break;case3:
text +="=";break;}returnEncoding.UTF8.GetString(Convert.FromBase64String(text));}}
Вопрос был не о кодировке URL, но все еще полезен ..
Моморо
Упс, выложил под неправильным вопросом
juliushuck
Нет проблем, все еще интересно посмотреть, как кодировать / декодировать URL-адрес :)
Momoro
3
Вы можете отобразить это так:
var strOriginal = richTextBox1.Text;byte[] byt =System.Text.Encoding.ASCII.GetBytes(strOriginal);// convert the byte array to a Base64 stringstring strModified =Convert.ToBase64String(byt);
richTextBox1.Text=""+ strModified;
Теперь конвертируем обратно.
var base64EncodedBytes =System.Convert.FromBase64String(richTextBox1.Text);
richTextBox1.Text=""+System.Text.Encoding.ASCII.GetString(base64EncodedBytes);MessageBox.Show("Done Converting! (ASCII from base64)");
Существуют различные версии Base64, которые не согласны с тем, что использовать для цифр 62 и 63, поэтому DecodeBase64Digitмогут допускать некоторые из них.
Ответы:
шифровать
раскодировать
источник
NullReferenceException
в вашем собственном коде, а не в чужом.Я делюсь своей реализацией с некоторыми полезными функциями:
Примечание: Помните, что для использования метода расширения вы должны (!) Импортировать пространство имен с
using
ключевым словом (в данном случаеusing MyApplication.Helpers.Encoding
).Код:
Пример использования:
источник
null
в случаеnull
очень противоречивого поведения. Никакой другой .net API, который работает со строками, не делает этого.Основываясь на ответах Эндрю Фокса и Себе, я перевернул их и сделал их строковыми расширениями вместо расширений Base64String.
источник
Небольшое изменение в ответе andrew.fox, так как строка для декодирования может быть неверной строкой в кодировке base64:
источник
Вы можете использовать следующую подпрограмму для преобразования строки в формат base64
Также вы можете использовать очень хороший онлайн-инструмент OnlineUtility.in для кодирования строки в формате base64.
источник
Применение
источник
URL безопасный Base64 Кодировка / Декодирование
источник
Вы можете отобразить это так:
Теперь конвертируем обратно.
Надеюсь, это поможет!
источник
Для тех, кто просто хочет кодировать / декодировать отдельные цифры base64:
Существуют различные версии Base64, которые не согласны с тем, что использовать для цифр 62 и 63, поэтому
DecodeBase64Digit
могут допускать некоторые из них.источник