C#-解码字符串不会返回原始编码的字符串

时间:2019-01-07 21:20:09

标签: c# encoding urlencode urldecode

我有一个随机生成的字符串,需要将其放入URL中,因此我将其编码为:

var encodedToken = System.Web.HttpUtility.UrlEncode(token, System.Text.Encoding.UTF8);

在ASP.NET操作方法中,我收到此令牌并对其进行解码:

var token = System.Web.HttpUtility.UrlDecode(encodedToken, System.Text.Encoding.UTF8);

,但是这些标记不相同。例如,ab+cd字符串将编码为ab%2bcd,对结果进行解码将得到ab cd字符串(加号字符变为空白)。

到目前为止,我仅注意到+字符问题,可能还有其他问题。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在您的上下文中,您似乎不需要调用UrlDecode(因为%2b解码为+,而+解码为空白-即您进行了双重解码)。

鉴于该框架似乎已经为您解码了,您可以删除对UrlDecode的使用。

答案 1 :(得分:-1)

根据Microsoft文档:

  

您可以使用UrlEncode方法或UrlPathEncode方法对URL进行编码。但是,这些方法返回不同的结果。 UrlEncode方法将每个空格字符转换为加号(+)。 UrlPathEncode方法将每个空格字符转换为字符串“%20”,该字符串以十六进制表示形式表示一个空格。在对URL的路径部分进行编码时,请使用UrlPathEncode方法,以确保解码后的URL一致,无论使用哪种平台或浏览器执行解码。

https://docs.microsoft.com/en-us/dotnet/api/system.web.httputility.urlencode?view=netframework-4.7.2