È comune a scambiare semplicemente l'alfabeto per l'utilizzo negli URL, in modo che non sia necessario eseguire la codifica%; solo 3 dei 65 caratteri sono problematici - +
, /
e =
. le sostituzioni più comuni sono -
al posto di +
e _
al posto di /
. Per quanto riguarda il padding: è sufficiente rimuoverlo (il =
); puoi dedurre la quantità di riempimento necessaria. All'altra estremità: basta invertire il processo:
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes)
.TrimEnd(padding).Replace('+', '-').Replace('/', '_');
con:
static readonly char[] padding = { '=' };
e per invertire:
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);
La domanda interessante, tuttavia, è: è presente lo stesso approccio che usa la "libreria di codec comune"? Sarebbe sicuramente una prima cosa ragionevole da testare - questo è un approccio abbastanza comune.
fonte
2014-10-14 07:10:54
Non puoi semplicemente usare 'Url.Encode' nella stringa in' BASE64'? –
In quale classe Url del namespace è presente in C#? –
Dai un'occhiata: http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode%28v=vs.110%29.aspx È necessario fare riferimento all'assembly 'System.Web'. –