C#百分比解码
C# Percentage Decoding
我正在尝试解码从 PHP 脚本传递到我的 C# 应用程序的百分比编码字符串。 PHP 加密数据,所以我对许多特殊字符进行百分比编码。
这是我在 URL 中传递的字符串:
%C9%90%04L%EFEA%D1U%AFi%CBc%3A%E5%D0%40Q%D6%1Bn%C9%C3%B5%0FT%FC%E5h%95m%EF%BF%24tB%A6%D1%08%3B%83%A1%CF%1B%99Zo%02
但是它的部分解码有问题:当我获取查询字符串时,像这样:
var queryString = HttpContext.Current.Request.QueryString;
var token = queryString["token"];
不过,变量 token
等于:
%C9%90%04L%EF%BF%BDEA%EF%BF%BDU%EF%BF%BDI%EF%BF%BDC%3A%EF%BF%BD%EF%BF%BD%40Q%EF%BF%BD%1BN%EF%BF%BD%C3%B5%0FT%EF%BF%BD%EF%BF%BDH%EF%BF%BDM%EF%BF%BD%24TB%EF%BF%BD%EF%BF%BD%08%3B%EF%BF%BD%EF%BF%BD%EF%BF%BD%1B%EF%BF%BDZO%02
这绝对不是我放入查询字符串中的内容。查看它时,第一次弄乱是 %EF
(从第 11 个字符开始进入原始查询字符串)。它显示的不是 %EF
:%EF%BF%BD
。当我稍作搜索时,我发现 this webpage 说 "Hex UTF-8 Bytes" 是 EF BF BD。
编辑:
忘记说了,QueryString 是这样的:
token=%c9%90%04L%ef%bf%bdEA%ef%bf%bdU%ef%bf%bdi%ef%bf%bdc%3a%ef%bf%bd%ef%bf%bd%40Q%ef%bf%bd%1bn%ef%bf%bd%c3%b5%0fT%ef%bf%bd%ef%bf%bdh%ef%bf%bdm%ef%bf%bd%24tB%ef%bf%bd%ef%bf%bd%08%3b%ef%bf%bd%ef%bf%bd%ef%bf%bd%1b%ef%bf%bdZo%02&oauth_token_secret=S%23%2bw%ef%bf%bd%ef%bf%bdX%17%ef%bf%bd0%ef%bf%bd%60%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd*%ef%bf%bdi%08%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%07%ef%bf%bd%12RS07%ef%bf%bdgl%1e%ef%bf%bd%d7%832%d1%a1%ef%bf%bd%275%ef%bf%bdv%ef%bf%bd
您可能正在寻找 HttpServerUtility.UrlDecode method:
HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request.QueryString["token"]);
你的错误在别的地方...
我在 .Net 4.0 项目中创建了一个新网页,并将其放在 Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
var queryString = HttpContext.Current.Request.QueryString;
var token = queryString["token"];
throw new Exception(token);
}
然后我 运行 转到此 URL 页面,该页面与您在上面提供的查询字符串相匹配:
页面解码了 token
并在异常消息中显示为:
ɐL�EA�U�i�c:��@Q�n�õT��h�m�$tB��;����Zo
(URL 正在对二进制字符串进行编码,因此在打印实际字符串时,有些字符不会显示。)
如果您 运行 这个和 token
实际打印“%C9%90%04L...”,那么您的令牌可能已被双重编码。所有百分号都将替换为“%25”,因此您的 URL 将如下所示:
由于您没有提到“%25”,错误出在您的代码中的其他地方。您认为您使用的 URL 不是正在解码的那个。
我正在尝试解码从 PHP 脚本传递到我的 C# 应用程序的百分比编码字符串。 PHP 加密数据,所以我对许多特殊字符进行百分比编码。
这是我在 URL 中传递的字符串:
%C9%90%04L%EFEA%D1U%AFi%CBc%3A%E5%D0%40Q%D6%1Bn%C9%C3%B5%0FT%FC%E5h%95m%EF%BF%24tB%A6%D1%08%3B%83%A1%CF%1B%99Zo%02
但是它的部分解码有问题:当我获取查询字符串时,像这样:
var queryString = HttpContext.Current.Request.QueryString;
var token = queryString["token"];
不过,变量 token
等于:
%C9%90%04L%EF%BF%BDEA%EF%BF%BDU%EF%BF%BDI%EF%BF%BDC%3A%EF%BF%BD%EF%BF%BD%40Q%EF%BF%BD%1BN%EF%BF%BD%C3%B5%0FT%EF%BF%BD%EF%BF%BDH%EF%BF%BDM%EF%BF%BD%24TB%EF%BF%BD%EF%BF%BD%08%3B%EF%BF%BD%EF%BF%BD%EF%BF%BD%1B%EF%BF%BDZO%02
这绝对不是我放入查询字符串中的内容。查看它时,第一次弄乱是 %EF
(从第 11 个字符开始进入原始查询字符串)。它显示的不是 %EF
:%EF%BF%BD
。当我稍作搜索时,我发现 this webpage 说 "Hex UTF-8 Bytes" 是 EF BF BD。
编辑:
忘记说了,QueryString 是这样的:
token=%c9%90%04L%ef%bf%bdEA%ef%bf%bdU%ef%bf%bdi%ef%bf%bdc%3a%ef%bf%bd%ef%bf%bd%40Q%ef%bf%bd%1bn%ef%bf%bd%c3%b5%0fT%ef%bf%bd%ef%bf%bdh%ef%bf%bdm%ef%bf%bd%24tB%ef%bf%bd%ef%bf%bd%08%3b%ef%bf%bd%ef%bf%bd%ef%bf%bd%1b%ef%bf%bdZo%02&oauth_token_secret=S%23%2bw%ef%bf%bd%ef%bf%bdX%17%ef%bf%bd0%ef%bf%bd%60%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd*%ef%bf%bdi%08%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%07%ef%bf%bd%12RS07%ef%bf%bdgl%1e%ef%bf%bd%d7%832%d1%a1%ef%bf%bd%275%ef%bf%bdv%ef%bf%bd
您可能正在寻找 HttpServerUtility.UrlDecode method:
HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request.QueryString["token"]);
你的错误在别的地方...
我在 .Net 4.0 项目中创建了一个新网页,并将其放在 Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
var queryString = HttpContext.Current.Request.QueryString;
var token = queryString["token"];
throw new Exception(token);
}
然后我 运行 转到此 URL 页面,该页面与您在上面提供的查询字符串相匹配:
页面解码了 token
并在异常消息中显示为:
ɐL�EA�U�i�c:��@Q�n�õT��h�m�$tB��;����Zo
(URL 正在对二进制字符串进行编码,因此在打印实际字符串时,有些字符不会显示。)
如果您 运行 这个和 token
实际打印“%C9%90%04L...”,那么您的令牌可能已被双重编码。所有百分号都将替换为“%25”,因此您的 URL 将如下所示:
由于您没有提到“%25”,错误出在您的代码中的其他地方。您认为您使用的 URL 不是正在解码的那个。