您可以在.NET Framework 4.0及更高版本中使用HttpEncoder.HeaderNameValueEncode方法.
对于以前版本的.NET Framework,您可以使用HttpEncoder.HeaderNameValueEncode参考页面上记录的逻辑来滚动自己的编码器:
Unicode值小于ASCII字符32的所有字符(ASCII字符9除外)都被URL编码为%NN格式,其中N个字符表示十六进制值.
ASCII字符9(水平制表符)不是URL编码的.
ASCII字符127编码为%7F.
所有其他字符均未编码.
更新:
正如OliverBock指出的那样,HttpEncoder.HeaderNameValueEncode方法受到保护并且是内部的.我去了开源Mono项目并找到了mono的实现
void HeaderNameValueEncode (string headerName, string headerValue, out string encodedHeaderName, out string encodedHeaderValue)
{
if (String.IsNullOrEmpty (headerName))
encodedHeaderName = headerName;
else
encodedHeaderName = EncodeHeaderString (headerName);
if (String.IsNullOrEmpty (headerValue))
encodedHeaderValue = headerValue;
else
encodedHeaderValue = EncodeHeaderString (headerValue);
}
static void StringBuilderAppend (string s, ref StringBuilder sb)
{
if (sb == null)
sb = new StringBuilder (s);
else
sb.Append (s);
}
static string EncodeHeaderString (string input)
{
StringBuilder sb = null;
for (int i = 0; i < input.Length; i++) {
char ch = input [i];
if ((ch < 32 && ch != 9) || ch == 127)
StringBuilderAppend (String.Format ("%{0:x2}", (int)ch), ref sb);
}
if (sb != null)
return sb.ToString ();
return input;
}
Run Code Online (Sandbox Code Playgroud)
仅供参考
[这里](https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs)
归档时间: |
|
查看次数: |
4959 次 |
最近记录: |