HttpUtility.HtmlDecode无法解码大于127的ASCII

时间:2010-10-22 10:14:09

标签: asp.net

我有一个字符列表,在WebBrowser中以编码字符的形式显示正常,例如€?? ... 但是当把这些字符发布到服务器上时,我意识到HttpUtility.HtmlDecode不能像浏览器那样将它们转换为字符,它们都会变成空间。

text = System.Web.HttpUtility.HtmlDecode("€");

我希望它返回€但它会返回空间。对于其他一些角色也会发生同样的事情。

有谁知道如何修复此问题或任何解决方法?

3 个答案:

答案 0 :(得分:1)

这通常是使用文字值并混合使用UTF-8和ASCII的结果。在UTF-8中,欧元符号被编码为 3字节,因此没有ASCII对应物。

<强>更新

如果您使用的是UTF-8,则您的代码是非法的,因为它只支持前128个字符,其余编码为多个字节。您需要使用Unicode语法:

  // !!! NOT HtmlDecode!!!
  text = System.Web.HttpUtility.UrlDecode("%E2%82%AC");

<强>更新

好的,我已经保留了代码,但添加了注释,它不起作用。它不起作用,因为它不是HTML关注的编码 - 它不是HTML。这与URL有关,因此您需要使用UrlDecode

答案 1 :(得分:0)

ASCII是7位;没有字符128到255.你链接的MSDN文章遵循假装ASCII的长期传统是8位;文章实际上显示了code page 437

我不确定为什么你不是简单地写&euro;(兼容性?),而是&#8364;&#x20ac; should do, too

答案 2 :(得分:0)

您通常希望执行以下操作:

string html = "&#128;"
string trash = WebUtility.HtmlDecode(html);
//Convert from default encoding to UTF8
byte[] bytes = Encoding.Default.GetBytes(trash);
string proper = Encoding.UTF8.GetString(bytes);