急!以Html格式复制黏贴时,中文内容变成乱码--冰天雪地,跪求仙人指路

lzxgy8008 2012-04-26 10:17:25
以Html格式复制黏贴时,中文内容变成乱码,代码如下:
StringBuilder sb = new StringBuilder();
sb.Append(@"Version:0.9
StartHTML:71
EndHTML:170
StartFragment:140
EndFragment:160
StartSelection:140
EndSelection:160");
sb.Append("<html><body>");
sb.AppendFormat("<span>{0}</span>", "中国");
sb.AppendFormat("<span>{0}</span>", "China");
sb.Append("</body></html>");
Clipboard.SetData(DataFormats.Html, sb.ToString());
运行的结果是“中国”两个字变成了“??”而China是可以正常显示出来的。
网上很多朋友说可以添加
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">
但我试过了,似乎不起作用。希望有高人可以指点迷津啊~~

感谢大牛assky124在我的上一篇帖子里提供的以html格式复制黏贴文字和图片的方法。
...全文
568 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
paopao_426 2013-10-21
  • 打赏
  • 举报
回复
在下试了一下,果然正点!试了一下,这样的话无法将黏贴板里的内容黏贴到qq的输入框里。求教啊,复制的html代码如何呈现在qq或者旺旺上
孟子E章 2012-04-26
  • 打赏
  • 举报
回复
试试
http://www.cnblogs.com/wudingfeng/archive/2008/10/30/1323142.html
assky124 2012-04-26
  • 打赏
  • 举报
回复

String nativeHTMLString =
@"Version:0.9
StartHTML:<<<<<<<1
EndHTML:<<<<<<<2
StartFragment:<<<<<<<3
EndFragment:<<<<<<<4
StartSelection:<<<<<<<3
EndSelection:<<<<<<<4
<!DOCTYPE>
<HTML>
<HEAD>
<TITLE> The HTML Clipboard and special characters</TITLE>
</HEAD>
<BODY>
<UL>
<!--StartFragment -->
<LI> The Fragment with special characters Ä Ö Ü ä ö ü ß 汉字</LI>
<!--EndFragment -->
</UL>
</BODY>
</HTML>";

string utf8EncodedHTMLString
= Encoding.GetEncoding(0).GetString(Encoding.UTF8.GetBytes(nativeHTMLString));

StringBuilder sb = new StringBuilder();
sb.Append(utf8EncodedHTMLString);
sb.Replace("<<<<<<<1",
(utf8EncodedHTMLString.IndexOf("<HTML>") + "<HTML>".Length).ToString("D8"));
sb.Replace("<<<<<<<2",
(utf8EncodedHTMLString.IndexOf("</HTML>")).ToString("D8"));
sb.Replace("<<<<<<<3",
(utf8EncodedHTMLString.IndexOf("<!--StartFragment -->") + "<!--StartFragment -->".Length).ToString("D8"));
sb.Replace("<<<<<<<4",
(utf8EncodedHTMLString.IndexOf("<!--EndFragment -->")).ToString("D8"));
string clipboardString = sb.ToString();

Clipboard.SetText(clipboardString, TextDataFormat.Html);


参考http://msdn.microsoft.com/en-us/library/windows/desktop/ms649015(v=vs.85).aspx
lzxgy8008 2012-04-26
  • 打赏
  • 举报
回复
@jaylongli:
放进去之前是好的
lzxgy8008 2012-04-26
  • 打赏
  • 举报
回复
@net_lover:
我在vs2010里试过了,这样不行的诶。
它把整个html黏贴出来了,我需要的是,黏贴的时候出来“中国”和“China”两个字符串。
孟子E章 2012-04-26
  • 打赏
  • 举报
回复
VS2010里面测试
Clipboard.SetText(sb.ToString());
在Office2010和Office2003里面粘贴是没有乱码的。
lzxgy8008 2012-04-26
  • 打赏
  • 举报
回复
@net_lover:
在word和excel里
lzxgy8008 2012-04-26
  • 打赏
  • 举报
回复
@mizuho_2006:
UTF-8和Unicode都试过了,不行诶。
加油馒头 2012-04-26
  • 打赏
  • 举报
回复
在放入黏贴板之前先打出来看下是否为乱码,
孟子E章 2012-04-26
  • 打赏
  • 举报
回复
我在VS2010里面这样设置是不会乱码的
Clipboard.SetText(sb.ToString());
孟子E章 2012-04-26
  • 打赏
  • 举报
回复
你在哪里粘贴出现的乱码?
lzxgy8008 2012-04-26
  • 打赏
  • 举报
回复
补充一句:
复制到剪切板是我们可以控制的,但黏贴是由用户执行的。也就是说是out of our control的。
mizuho_2006 2012-04-26
  • 打赏
  • 举报
回复
编码格式改一下。gb2312应该没有问题的,简体中文。要不改成UTF8试试。
lzxgy8008 2012-04-26
  • 打赏
  • 举报
回复
结贴啦~~~
@assky124:
assky124真牛人也!你的方法是正解啊。王道就是中间这句:
string utf8EncodedHTMLString = Encoding.GetEncoding(0).GetString(Encoding.UTF8.GetBytes(nativeHTMLString));

@net_lover:
也感谢你的帮助哦。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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