当前位置: 代码迷 >> .NET Framework >> 估计是.Net的一个Bug, 用剪切板取到的HTML汉字变乱码,该如何处理
  详细解决方案

估计是.Net的一个Bug, 用剪切板取到的HTML汉字变乱码,该如何处理

热度:70   发布时间:2016-05-02 00:44:02.0
估计是.Net的一个Bug, 用剪切板取到的HTML汉字变乱码
我写了一个WinForm程序希望从剪切板中获取Html代码。
从IE中圈一段网页,按Ctr+C,在C#中通过剪切板获取HTML代码。(用拖拽也一样效果)    
                                              string     st     =     "HTML     Format ";    
                                              object     o     =     Clipboard.GetData(st);    
 
得到的字符串中,英文完好,但是汉字变成了乱码。    
下面的原始HTML代码:    
 
请到 <a     href= "http://post.baidu.com/f?ct=&tn=&rn=&pn=&lm=&kw=%B0%D9%B6%C8&rs2=0&myselectvalue=1&word=%B0%D9%B6%C8&tb=on "     target= "_blank "> 百度吧 </a> 留言    
 
C#变成了:    
 
璇峰埌 <A        
href= "http://post.baidu.com/f?ct=&amp;tn=&amp;rn=&amp;pn=&amp;lm=&amp;kw=%B0%D9%B6%C8&amp;rs2=0&amp;myselectvalue=1&amp;word=%B0%D9%B6%C8&amp;tb=on "        
target=_blank> 鐧惧害鍚?/A> 鐣欒█    
 
 
 
经研究发现,原本IE中的HTML是GB2312的编码,被.NET当成了UTF8编码转换。转化后的英文没有问题,汉字成了乱码。    
 
 
我尝试用下面的代码把汉字乱码恢复正常。    
                                              string     a;    
                                              byte[]     bs;    
                                              bs     =     System.Text.Encoding.Default.GetBytes(o.ToString());    
                                              a     =     System.Text.Encoding.UTF8.GetString(bs);    
但是有些极端情况下,还是存在少量的乱码无法恢复,因为原始的信息已经被破坏了。    
向上面那段HTML就变成了:    
请到 <A        
href= "http://post.baidu.com/f?ct=&amp;tn=&amp;rn=&amp;pn=&amp;lm=&amp;kw=%B0%D9%B6%C8&amp;rs2=0&amp;myselectvalue=1&amp;word=%B0%D9%B6%C8&amp;tb=on "        
target=_blank> 百度?/A> 留言    
 
 
 
不知道哪位达人有办法解决这个问题??

------解决方案--------------------
bs中在web。config里设置编码,就可以。
------解决方案--------------------
web.config里设置编码
------解决方案--------------------
&amp;很像是被xml解掉的。
------解决方案--------------------
能过如下代码在剪贴板中获取含HTML格式的文本时发现当内容出现汉字的时候会有乱码
if (Clipboard.ContainsText(TextDataFormat.Html))
textBox1.Text = Clipboard.GetText(TextDataFormat.Html);
通过剪贴板工具分析,HTML格式的文本是UTF8编码方式
看来Clipboard.GetText()是解码出了问题
那就自己来完成这个解码工作吧!
if (Clipboard.ContainsText(TextDataFormat.Html))
{
MemoryStream vMemoryStream =
  相关解决方案