2010-10-22 73 views
2

我有一个在web浏览器中的编码的字符,如€  ... 形式显示效果细腻人物的名单,但发布到服务器,这些人物时,我意识到,HttpUtility更大。 HtmlDecode不能像浏览器那样将它们转换为字符,它们都变成了空间。HttpUtility.HtmlDecode不能解码ASCII超过127

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

我希望它返回€,但它返回的空间,而不是。同样的事情也发生在其他人物身上。

有谁知道如何解决这个或任何解决方法?

+3

ASCII只到127 ....你想ANSI的可能? – leppie 2010-10-22 10:48:37

+0

你可以在这里找到它http://msdn.microsoft.com/en-us/library/9hxt0028%28v=vs.71%29.aspx – thethanghn 2010-10-23 02:31:28

回答

1

这是通常使用文字值和混合UTF-8和ASCII的结果。在UTF-8欧元符号编码为3个字节,所以没有ASCII对应的。如果您使用的是UTF-8,因为它仅支持前128个字符,其余被编码为多个字节

更新

你的代码是非法的。您需要使用Unicode语法:

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

UPDATE

OK,我已经离开了代码,因为它是,但添加的注释,这是行不通的。它不起作用,因为它不是HTML所关心的编码 - 它不是HTML。这是该URL的关注,因此您需要使用UrlDecode来代替。

+0

我试过你的代码,但它没有奏效。此外,我需要一种方式来编码€像一个有意义的信。我无法将€转换为%E2%82%AC来解码它 – thethanghn 2010-10-23 02:28:12

+0

查看我的更新。你需要使用UrlDecode。 – Aliostad 2010-10-23 11:04:35

0

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

我不知道你为什么不简单地写€(兼容性?),但€€should do, too

+0

我收到客户的€,他想将其显示为欧元符号 – thethanghn 2010-10-27 11:00:42

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); 
相关问题