在追踪错误时,我发现在HttpServerUtility.UrlTokenEncode
和Convert.ToBase64String
之间转换为Base64并返回时出现以下差异:
string test = "IN ('en-US')";
Console.WriteLine(HttpServerUtility.UrlTokenEncode(Encoding.UTF8.GetBytes(test)));
Console.WriteLine(Convert.ToBase64String(Encoding.UTF8.GetBytes(test)));
结果略有不同:第一种方法有一个额外的尾随零:
SU4gKCdlbi1VUycp0
SU4gKCdlbi1VUycp
JavaScript btoa()
也为我提供了没有尾随零的值。
我知道这个零只是用于填充,但是第二个转换仍然符合base64标准吗?或者我们应该避免使用HttpServerUtility.UrlTokenEncode
支持Convert.ToBase64String
无处不在?
答案 0 :(得分:2)
我认为此SO帖子提供了有关此问题的更多信息,最后的数字似乎表示已删除=
个符号的数量:Encode URL from C#, decrypt URL in PHP (extra characters being added somehow)
从它的外观来看,UrlTokenEncode
尤其适用于对URL中的标记进行编码。令牌不应包含在网址中具有含义的字符,例如=
,/
和+
。
在这里,您可以看到用于UrlTokenEncode的代码:http://referencesource.microsoft.com/System.Web/R/0e3cb83cf51ca334.html