以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格式复制黏贴文字和图片的方法。

解决方案 »

  1.   

    编码格式改一下。gb2312应该没有问题的,简体中文。要不改成UTF8试试。
      

  2.   

    补充一句:
    复制到剪切板是我们可以控制的,但黏贴是由用户执行的。也就是说是out of our control的。
      

  3.   

    我在VS2010里面这样设置是不会乱码的
    Clipboard.SetText(sb.ToString());
      

  4.   

    @mizuho_2006:
    UTF-8和Unicode都试过了,不行诶。
      

  5.   

    @net_lover:
    在word和excel里
      

  6.   

    VS2010里面测试
    Clipboard.SetText(sb.ToString());
    在Office2010和Office2003里面粘贴是没有乱码的。
      

  7.   

    @net_lover:
    我在vs2010里试过了,这样不行的诶。
    它把整个html黏贴出来了,我需要的是,黏贴的时候出来“中国”和“China”两个字符串。
      

  8.   

    @jaylongli:
    放进去之前是好的
      

  9.   


                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
      

  10.   

    试试
    http://www.cnblogs.com/wudingfeng/archive/2008/10/30/1323142.html
      

  11.   

    结贴啦~~~
    @assky124:
    assky124真牛人也!你的方法是正解啊。王道就是中间这句:
    string utf8EncodedHTMLString  = Encoding.GetEncoding(0).GetString(Encoding.UTF8.GetBytes(nativeHTMLString));@net_lover:
    也感谢你的帮助哦。
      

  12.   

    在下试了一下,果然正点!试了一下,这样的话无法将黏贴板里的内容黏贴到qq的输入框里。求教啊,复制的html代码如何呈现在qq或者旺旺上