估计是.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=&tn=&rn=&pn=&lm=&kw=%B0%D9%B6%C8&rs2=0&myselectvalue=1&word=%B0%D9%B6%C8&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=&tn=&rn=&pn=&lm=&kw=%B0%D9%B6%C8&rs2=0&myselectvalue=1&word=%B0%D9%B6%C8&tb=on "
target=_blank> 百度?/A> 留言
不知道哪位达人有办法解决这个问题??
------解决方案--------------------bs中在web。config里设置编码,就可以。
------解决方案--------------------web.config里设置编码
------解决方案--------------------&很像是被xml解掉的。
------解决方案--------------------能过如下代码在剪贴板中获取含HTML格式的文本时发现当内容出现汉字的时候会有乱码
if (Clipboard.ContainsText(TextDataFormat.Html))
textBox1.Text = Clipboard.GetText(TextDataFormat.Html);
通过剪贴板工具分析,HTML格式的文本是UTF8编码方式
看来Clipboard.GetText()是解码出了问题
那就自己来完成这个解码工作吧!
if (Clipboard.ContainsText(TextDataFormat.Html))
{
MemoryStream vMemoryStream =