C# C“解码”â„¢&引用;至;TM";

C# C“解码”â„¢&引用;至;TM";,c#,encoding,decoding,C#,Encoding,Decoding,在网页上有以下字符串 “高通Snapdragon™ S4“ 当我在.net代码中获得该字符串时,该字符串将转换为“Qualcomm Snapdragon–S4” 字符“TM”变为–1 我如何将“TM”解码回“TM” 更新 下面是使用webproxy下载字符串的代码 wc是webproxy wc.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8"); string html = Server.HtmlEncode(wc.DownloadString(u

在网页上有以下字符串

“高通Snapdragon™ S4“

当我在.net代码中获得该字符串时,该字符串将转换为“Qualcomm Snapdragon–S4”

字符“TM”变为–1

我如何将“TM”解码回“TM”

更新

下面是使用webproxy下载字符串的代码
wc是webproxy

wc.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8");
string html = Server.HtmlEncode(wc.DownloadString(url));

你首先应该阅读正确编码的网页。在本例中,您似乎正在使用
编码进行阅读。默认值为
(即可能是CP1252),并且页面实际上是UTF-8格式的。通过读取响应的
内容类型
标题或在内容中查找
,可以明显看出这一点

如果事后你仍然需要这样做,那么使用

var bytes = Encoding.Default.GetBytes(myString);
var correctString = Encoding.UTF8.GetString(bytes);

在任何情况下,您首先都需要知道页面上使用的确切编码以及读取格式错误的字符串。此外,我通常会明确建议不要使用
Encoding.Default
,因为它的值不是固定的。它只是Windows系统上用于非Unicode应用程序的传统编码,也可以用作默认的非Unicode文本文件编码。它在处理外部资源方面应该没有任何位置。

您是如何获得“.net代码”的?看起来好像出了什么问题。@Henk Holterman…实际上字符串是从解码的html文本中输入的。@AbdulBasit的副本-错误在于如何解码它。。。所以这是无法回答的。然后尝试
wc.Encoding=Encoding.UTF8
before
wc.DownloadString
。这就是我所做的。你能帮我看看这个代码有什么问题吗。。。。。wc.标题。添加(“接受字符集”、“ISO-8859-1、utf-8”);字符串html=Server.HtmlEncode(wc.DownloadString(url))
Accept字符集
只是对服务器的一个提示,它没有义务遵守它。虽然在这种情况下,它显然是通过发送UTF-8实现的,您说这是可以接受的。但是,
DownloadString
应该使用响应中指定的编码来解码正文。因此,显然服务器没有发送任何内容或错误的值(遗憾的是,这很常见)。在这种情况下,如果您知道它是UTF-8,您可以使用
下载数据
,然后自己将其解码为字符串。另请参阅我对问题的评论。有可设置的
wc.Encoding
属性。可能web服务器认为UTF-8是一种标准编码,它觉得不必声明。@Jeppe,也可能是响应没有声明编码,而HTML声明编码。但这是
WebClient
无法接受的。