C# 使用c对每个utf-8字符进行百分比编码#

C# 使用c对每个utf-8字符进行百分比编码#,c#,url-encoding,percent-encoding,C#,Url Encoding,Percent Encoding,我想准备一个字符串,将其放入“post”请求中。不幸的是,我发现的所有url编码方法似乎只对少数字符应用百分比编码。各种方法,例如HttpUtility.UrlEncode,保留了一些字符,例如()和§未触及。不幸的是,大多数现有转换器只查看不兼容的URL字符。主要用于(正如您所提到的)URL编码,或用于防止跨站点脚本编写 如果你想从头开始做一个,需要花一些时间进行查找,但这会很有趣。您可以覆盖现有编码器并添加与您相关的其他字符,或者也可以更改所有字母和数字 这是一个很好的UTF/ASCII--

我想准备一个字符串,将其放入“post”请求中。不幸的是,我发现的所有url编码方法似乎只对少数字符应用百分比编码。各种方法,例如HttpUtility.UrlEncode,保留了一些字符,例如()和§未触及。

不幸的是,大多数现有转换器只查看不兼容的URL字符。主要用于(正如您所提到的)URL编码,或用于防止跨站点脚本编写

如果你想从头开始做一个,需要花一些时间进行查找,但这会很有趣。您可以覆盖现有编码器并添加与您相关的其他字符,或者也可以更改所有字母和数字

这是一个很好的UTF/ASCII-->HTML编码链接


这就是你想要的吗

string input = @"such as () and § untouched.";
//Console.WriteLine(input);
Console.WriteLine(HttpUtility.UrlEncodeUnicode(input));
Console.WriteLine(HttpUtility.UrlEncode(input));
string everything = string.Join("", input.ToCharArray().Select(c => "%" + ((int)c).ToString("x2")).ToArray());
Console.WriteLine(everything);
Console.WriteLine(HttpUtility.UrlDecode(everything));

//This is my understanding of what you're asking for:
string everythingU = string.Join("", input.ToCharArray().Select(c => "%u" + ((int)c).ToString("x4")).ToArray());
Console.WriteLine(everythingU);
Console.WriteLine(HttpUtility.UrlDecode(everythingU));
哪些产出:

such+as+()+and+%u00a7+untouched.
such+as+()+and+%c2%a7+untouched.
%73%75%63%68%20%61%73%20%28%29%20%61%6e%64%20%a7%20%75%6e%74%6f%75%63%68%65%64%2e
such as () and � untouched.

%u0073%u0075%u0063%u0068%u0020%u0061%u0073%u0020%u0028%u0029%u0020%u0061%u006e%u0064%u0020%u00a7%u0020%u0075%u006e%u0074%u006f%u0075%u0063%u0068%u0065%u0064%u002e
such as () and § untouched.

我可能错了,但请尝试UrlEncodeUnicode。当然,如果我上面提到的只是一些GetBytes后跟ToString(“x2”),也适用于HttpUtility.UrlEncodeUnicode。在其他角色中!,()和<没有转义。为什么需要转义这些字符?他们没有逃脱的原因是因为他们不需要逃脱。POST处理程序应该能够处理由
HttpUtility.UrlEncode
创建的任何内容。为什么.net不包含这样的转换器?当试图快速进行开发时,这种缺乏令人尴尬和沮丧。我希望不需要深入到这些基本任务,但它确实显示了每个字符的十六进制值,这与美国的URL编码几乎相同(至少在我的理解中是如此)。