我想在C#中实现Base64 URL安全编码。在Java中,我们有一个公共Codec库,该库为我提供了一个URL安全编码的字符串。如何使用C#实现相同目的?
Codec
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode"); string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
上面的代码将其转换为Base64,但填充了==。有没有办法实现URL安全编码?
==
通常, 只需交换字母 以用于url中,这样就不必进行%编码;只有65个字符的3是有问题- +,/和=。最常见的替换是-到位的+,并_代替/。至于填充: 只需将其删除 (=)即可;您可以 推断 出所需的填充量。在另一端:只需逆转该过程即可:
+
/
=
-
_
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes) .TrimEnd(padding).Replace('+', '-').Replace('/', '_');
与:
static readonly char[] padding = { '=' };
并反转:
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);
但是,有趣的问题是: 这是否与“通用编解码器库”使用的方法相同? 测试当然是一件很合理的事情-这是一种非常普遍的方法。