我有一个字符列表,在WebBrowser中以编码字符的形式显示正常,例如€?? ... 但是当把这些字符发布到服务器上时,我意识到HttpUtility.HtmlDecode不能像浏览器那样将它们转换为字符,它们都会变成空间。
text = System.Web.HttpUtility.HtmlDecode("€");
我希望它返回€但它会返回空间。对于其他一些角色也会发生同样的事情。
有谁知道如何修复此问题或任何解决方法?
答案 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。
我不确定为什么你不是简单地写€
(兼容性?),而是€
或€
should do, too。
答案 2 :(得分:0)
您通常希望执行以下操作:
string html = "€"
string trash = WebUtility.HtmlDecode(html);
//Convert from default encoding to UTF8
byte[] bytes = Encoding.Default.GetBytes(trash);
string proper = Encoding.UTF8.GetString(bytes);