估计是.Net的一个Bug, HTML汉字变乱码

LeadWorld 2007-04-27 05:21:53
从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>留言



不知道哪位达人有办法解决这个问题??
...全文
1163 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyw1997 2007-11-19
  • 打赏
  • 举报
回复
Font="宋体"
zhongwanli 2007-10-18
  • 打赏
  • 举报
回复
需要Encoding 来解码。
honey52570 2007-10-17
  • 打赏
  • 举报
回复
jf
panzi667 2007-10-13
  • 打赏
  • 举报
回复
jf
None465465535 2007-10-12
  • 打赏
  • 举报
回复
可以用Encoding.Default来解码
lextm 2007-10-08
  • 打赏
  • 举报
回复
从ClipBoard里面得到的字符串是什么编码,这个问题估计MS不可能做到ClipBoard这个通用类里面。需要你自己进行String的Encoding判断,然后转换成合适的显示编码。所以需要在Encoding之类的帮助里面去看看。
yushiro 2007-09-15
  • 打赏
  • 举报
回复
回帖那么多,没一个回答了楼主的问题。
我也遇到类似的情况。
请不要讲文件SAVE AS UTF8格式,
剪贴板里面的内容是从IE里面copy来的,不一定是本地文件,编码格式没法控制。
qcrsoft 2007-06-08
  • 打赏
  • 举报
回复
别张最闭嘴MS、.NET的BUG BUG的,发现BUG也需要很高水平的,一介小P孩能发现人微软的BUG么
yayx 2007-06-08
  • 打赏
  • 举报
回复
汉字编码的问题本来就有些复杂
一个文本文件本身就是有编码的,可以用记事本打开,另存为,会发现有编码选项,不过很少注意
网页上一般通用utf-8所以.net默认utf-8也不奇怪
不过经常做网页的时候IE中HTML默认成gb2312,所以两者在一起不兼容,这个问题特别在做ajax返回xml的时侯会遇到,所以出现LZ的乱码情况
最佳实践是统统使用utf-8 utf-8是兼容世界上所有语言的...三个字节表示一个字符
首先注意把所有的文本文件(html aspx xml)用记事本重新保存成utf-8 确定没有乱码,html的<head>里面也指定成utf-8....
之后在程序里基本上一路就顺了
jl1024 2007-06-06
  • 打赏
  • 举报
回复
你好,请使用下面的语句试试看。 这个问题基本是有不同的Encoding问题造成的。经我试验,指定unicode 文字以后,应该可以解决你的问题。

object o=Clipboard.GetData(DataFormats.UnicodeText);
熊霸天 2007-06-04
  • 打赏
  • 举报
回复
不要把责任都推给微软

虽然盖茨很有钱

但是不要有仇富心里

做人要 厚道
chinawin2012 2007-05-31
  • 打赏
  • 举报
回复
有句行话:"用不来不要说人家做的产品有BUG";
最佳实践:不管是什么winform,aspx等等都用UTF8
icemaple123 2007-05-21
  • 打赏
  • 举报
回复
我看你就他妈有bug
wei123456 2007-05-17
  • 打赏
  • 举报
回复
<meta charset="gb2312" http-equiv="Content-Type" content="text/html">
wei123456 2007-05-17
  • 打赏
  • 举报
回复
System.Text.Encoding.GetEncoding("gb2312")
sbqcel 2007-05-17
  • 打赏
  • 举报
回复
楼主别激动,呵呵
winform里有App.config吧,和Web.config一样的
设置下嘛
wei123456 2007-05-17
  • 打赏
  • 举报
回复
什么叫不懂WinForm程序,是楼主你自己没说清楚吧

从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编码转换。转化后的英文没有问题,汉字成了乱码。
.............
LeadWorld 2007-05-17
  • 打赏
  • 举报
回复
晕死
这些搞WEB的,根本不懂WinForm程序。
LeadWorld 2007-05-16
  • 打赏
  • 举报
回复
回复人:bwangel(永远的裤衩) ( 二级(初级)) 信誉:100 2007-5-15 1:08:03 得分:0
?

正因为LZ没有搞过WEB,才不知道这是Web 特有的HTMLencode, 只有在浏览器里才能显示正常,和用什么编码没有关系.一般为了防止网页中外来的"<"或">"等符号破坏原有的标签,才把"<"替换成了<, ">"替换成了"<",等等...

==================================================================


你怎么知道我就没搞过Web?
但我看你一定没搞过Winform,你根本不知道我在说什么。
我的是用WinForm程序解析剪切板中的HTML代码,是在IE中通过Ctrl+C复制到剪切板中的HTML代码。跟服务器端根本没有关系,也不区分HTML来自哪个网站。
vfan2010 2007-05-15
  • 打赏
  • 举报
回复
怎么可能是bug呢.
加载更多回复(20)

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧