É comum simplesmente trocar o alfabeto para uso em urls, de forma que nenhuma codificação% seja necessária; apenas 3 dos 65 caracteres são problemáticos - +
, /
e =
. as substituições mais comuns estão -
no lugar de +
e _
no lugar de /
. Quanto ao preenchimento: basta retirá-lo (o =
); você pode inferir a quantidade de preenchimento necessária. Na outra ponta: basta inverter o processo:
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes)
.TrimEnd(padding).Replace('+', '-').Replace('/', '_');
com:
static readonly char[] padding = { '=' };
e para reverter:
string incoming = returnValue
.Replace('_', '/').Replace('-', '+');
switch(returnValue.Length % 4) {
case 2: incoming += "=="; break;
case 3: incoming += "="; break;
}
byte[] bytes = Convert.FromBase64String(incoming);
string originalText = Encoding.ASCII.GetString(bytes);
A questão interessante, entretanto, é: esta é a mesma abordagem que a "biblioteca de codecs comuns" usa? Certamente seria uma primeira coisa razoável a testar - esta é uma abordagem bastante comum.
Url.Encode
na cordaBASE64
?