Метод C#, такой как Base64String, но только буквенно-цифровой (без плюса и косой черты).
-
06-09-2019 - |
Вопрос
существует ли какой-либо метод С#, который работает аналогично Convert.ToBase64String, но не генерирует ничего, кроме буквенно-цифрового вывода?
Спасибо!
Решение
Тогда вы, вероятно, рассматриваете возможность использования чего-то вроде кодировки Base32.Существует кодер/декодер Base32 для C#. здесь Майкл Джагнокаво.Он использует комбинацию заглавных букв и цифр.
Также есть соответствующее обсуждение на StackOverflow. здесь.
РЕДАКТИРОВАТЬ: И если случайно это кодировка Base64, безопасная для URL-адресов, просто выполните Base64 и замените «+» на «-» и «/» на «_».Но я предполагаю, что вам это может не понадобиться.
Другие советы
Ответы немного устарели.В интересах будущих искателей:Лучший способ справиться с этим сейчас на С#:
byte[] b; // fill your byte array somehow
string s = System.Web.HttpServerUtility.UrlTokenEncode(b);
Это возвращает строку в кодировке Base64, безопасную для URL-адресов (это то, что вы сказали, что вам действительно нужно в комментариях к вашему вопросу).
Затем вы можете декодировать его снова, используя, как вы уже догадались:
byte[] b = System.Web.HttpServerUtility.UrlTokenDecode(s);
вы можете заменить + или косую черту какой-либо предопределенной строкой, если это возможно.
Распространенным вариантом base-64 (для использования в строке запроса) является использование «-» и «_» вместо «+» и «/».Возможно, немного Replace(...)
на каждом конце подойдет?
Вы можете использовать BitConverter.ToString(), который предоставит вам шестнадцатеричную строку.Однако полученные строки будут длиннее, чем кодировка Base64.
Я искал такой кодировщик и использовал https://github.com/renmengye/base62-csharp/
Это кодировщик/декодер в диапазоне символов «0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz».
Я просто завернул его методы в
System.Text.Encoding.UTF8.GetBytes(plainText);
иSystem.Text.Encoding.UTF8.GetString(decoded);
вызовы, позволяющие ему легко работать со строками.