Ant*_*ony 17 html c# encoding utf-8
我正在使用C#和.Net 3.5中的桌面客户端程序与Web服务器进行交互.我正在使用Fiddler来查看Web浏览器发送的流量,并模拟它.可悲的是,这台服务器已经很老了,对于charsets和utf-8的概念有点困惑.大多数情况下它使用Latin-1.
当我在包含"特殊"字符的Web浏览器中输入数据时,如"Ωπℵ♣♥♥♉♉♋♌♌♎♏♐♑♓♓",fiddler告诉我它们从浏览器传送到服务器如下: "♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ "
但对于我的客户端,HttpUtility.HtmlEncode不会转换这些字符,而是将它们保留为原样.我需要打电话将"♈"转换为♈ 等等?
Ant*_*nes 13
HtmlEncode的返回值类型是一个字符串,它是Unicode,因此不需要对这些字符进行编码.
如果输出流的编码与这些字符不兼容,那么使用HtmlEncode,如下所示: -
HttpUtility.HtmlEncode(outgoingString, Response.Output);
Run Code Online (Sandbox Code Playgroud)
然后HtmlEncode适当地转义字符.
bdu*_*kes 12
Rich Strahl刚刚发布了一篇博文,Html和Uri字符串编码,没有System.Web,他也有一些自定义代码,可以编码上面的字符范围.
/// <summary>
/// HTML-encodes a string and returns the encoded string.
/// </summary>
/// <param name="text">The text string to encode. </param>
/// <returns>The HTML-encoded text.</returns>
public static string HtmlEncode(string text)
{
if (text == null)
return null;
StringBuilder sb = new StringBuilder(text.Length);
int len = text.Length;
for (int i = 0; i < len; i++)
{
switch (text[i])
{
case '<':
sb.Append("<");
break;
case '>':
sb.Append(">");
break;
case '"':
sb.Append(""");
break;
case '&':
sb.Append("&");
break;
default:
if (text[i] > 159)
{
// decimal numeric entity
sb.Append("&#");
sb.Append(((int)text[i]).ToString(CultureInfo.InvariantCulture));
sb.Append(";");
}
else
sb.Append(text[i]);
break;
}
}
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*ick 12
这看起来非常低效,但我能想到的唯一方法是浏览每个角色:
public static string MyHtmlEncode(string value)
{
// call the normal HtmlEncode first
char[] chars = HttpUtility.HtmlEncode(value).ToCharArray();
StringBuilder encodedValue = new StringBuilder();
foreach(char c in chars)
{
if ((int)c > 127) // above normal ASCII
encodedValue.Append("&#" + (int)c + ";");
else
encodedValue.Append(c);
}
return encodedValue.ToString();
}
Run Code Online (Sandbox Code Playgroud)