在c#中操作剪切板时如果使用 Clipboard.GetText()时中文正常
当使用 Clipboard.GetData(TextDataFormat.Html)时只要遇到中文就会乱码,
后来经过如下处理大部分中文可以显示,但是遇到某些文字还是会乱码,不知何故,还请高手指点阿!byte[] data = Encoding.Convert(Encoding.UTF8, Encoding.Default, Encoding.Default.GetBytes(Clipboard.GetText(TextDataFormat.Html)));
string str = Encoding.Default.GetString(data);这是剪切板中的html
<html>
<body>杭州市</body>
</html>这是上述结果中的str值
Version:1.0
StartHTML:000000215
EndHTML:000000376
StartFragment:000000330
EndFragment:000000340
StartSelection:000000330
EndSelection:000000340
SourceURL:file://C:\Documents and Settings\kevin\桌面\a.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD></HEAD><BODY><!--StartFragment-->杭州?<!--EndFragment--></BODY>
</HTML>

解决方案 »

  1.   

    //这句是系统从剪贴板中取得字符串(这里可能已经丢失数据了)
    string str = Clipboard.GetText(TextDataFormat.Html);//系统用的是Default编码,但实际上不是Default。这句是用来还原byte[]
    byte[] buffer = Encoding.Default.GetBytes(str);//这句用正确的编码方式来解码(不需要像你那样把byte[]再转换一次)
    string str = Encoding.UTF8.GetString(buffer);
      

  2.   

    楼上说的有道理,但是这两种办法得出的结果是一样的,我也在怀疑系统把ascii编码直接当unicode处理而使一些字符无法识别变成了0x30而此后是不可能转回去的,但是不知道有什么办法可以改变默认使用的编码方式
      

  3.   

    可是问题怪就怪在读取文本方式出来的数据就是正常的不会乱码
    如:
    Clipboard.GetText()
    但是我需要读取html源码!!!!
      

  4.   

    读取html源码?为什么要用clipboard?不用sock直接下载?