尝试了很久,好像只有utf-8最接近,但是转换出来中文字符还是有很多“?”,都是在中文字符与那种单字节符号相邻的地方。
比如说: 网页上复制的文本是“你好a”,程序中得到的却是“你?a”了。
请问这个问题怎样解决?
谢谢!!

解决方案 »

  1.   

    不是System.Text.Encoding.Default , System.Text.Encoding.Default解出来所有中文字符都是乱码
      

  2.   

    把UTF8转换成Default编码就可以了~很难吗?
      

  3.   

    本想叫你自己动手的. ^^附源代码(试试吧),原理其实很简单的,GetDataPresent方法用的是
    UTF8编码,你把他转换成Default编码就行了塞.自己动手好.private string GetHtmlFromClipboard()
    {
    string result = string.Empty;
    IDataObject dataObj = Clipboard.GetDataObject();
    if(dataObj.GetDataPresent(DataFormats.Html))
    {
    string s = dataObj.GetData(DataFormats.Html).ToString();
    byte[] b = System.Text.Encoding.Convert(System.Text.Encoding.UTF8,System.Text.Encoding.Default,System.Text.Encoding.Default.GetBytes(s));
    result = System.Text.Encoding.Default.GetString(b);
    }
    return result;
    }
      

  4.   

    请参考:
    http://community.csdn.net/Expert/topic/4581/4581937.xml?temp=.7930872
    那是我的代码,Encoding.Convert与Encoding.UTF8.GetString得到的结果是一样的,这个我实际尝试过..我不是想当然就来问的,所以请不要想当然回答,谢谢!!
      

  5.   

    哈哈~ 没有注意这个问题CF_HTML文档说的是采用UTF8编码(CF_HTML is entirely text format and uses the transformation format UTF-8),但转换过来有字符丢失,可能是GetData方法本身使用了不规范的解码所制.UTF8编码本身长度不一(1-3byte),有3byte的字符丢失.以上是初步结论,没细看,有时间慢慢研究.
      

  6.   

    晚上7:00多回来研究了一下,的确是GetData方法使用了不规范的解码.原因就是上面说的一样,在处理3byte的字符时有问题.关于UTF8编码方式,请自己参考文档.正题:介于以上问题,只有使用API了,
    请参考以下DLL函数:
    user32.dll
    OpenClipboard,GetClipboardData,CloseClipboard,RegisterClipboardFormat可能需要
    kernel32.dll
    GlobalLock,GlobalSize,GlobalUnlock
    不行就留邮箱吧~(今天同学生日喝多了,先睡觉了)