我想将字符串经过特殊编码后,得到的字节数组存入剪贴板,之后作为字符串复制到其它程序中。由于其它程序对复制进来的字符串有特殊要求,只能接受UTF8格式的字符串,但是UTF8格式的一个字符占3个字节,注意了,这里就有问题了,如果我输入的是单数个字符,那么得到的字节数也是单数的,如果直接在C#中转换为普通的字符串(乱码)传递给剪贴板,再从剪贴板复制出来是不行的,因为C#在传递字符串时,是转换为双字节字符组成的字符串,最后一个UTF8字符处理会出错。总之,除了用自定义格式设置剪贴板内容,将处理过的字节数组传递过去,之后改变剪贴板格式为文本,别无他法,求方法。先30分询问,无人回答直接关闭帖子。如果有满意答案,分数加至300分结贴。

解决方案 »

  1.   

    因为C#在传递字符串时,是转换为双字节字符组成的字符串,最后一个UTF8字符处理会出错。
    --------------------------------
    能不能人为地在最后增加一个字符
      

  2.   

    .NET中不存在单字节的字符,你就算加一个字符,也是加了两个字节,所以没用的。
      

  3.   

    当然不行,难道要我一个个敲上去?
    我就是想事先保存一些常用短语,用的时候使用快捷键调出,然后Ctrl+V复制过去,多么方便的功能。请不要逃避问题,不用剪贴板就没意义了。
      

  4.   

    你们怎么都跑题了,我问的是剪贴板,偏偏扯到其他地方去。只不过是一个辅助程序,类似Office中的剪贴板收集而已,搞什么数据库,序列化出来啊,我又不是不会那些。请问:老板让你做个东西出来,你觉得不爽,做其他东西代替可以吗?
      

  5.   

    http://www.codeproject.com/KB/system/clipboard_backup_cs.aspxhttp://www.codeproject.com/KB/clipboard/archerclipboard1.aspxhttp://support.microsoft.com/kb/159823所有操作用P/INVOKE来实现
      

  6.   


    剪贴板 里面保存的是字符串 你就不能按字节取出来用吗就算老板让你做个东西,也没有说"把剪贴板的数据强转成String取出来..." 这样的话吧
      

  7.   

    通过前面个链接的代码,我分析了下API的实现原理,最终实现了我的目的,包装了两个通用方法,指定字符编码传递剪贴板。
    虽然并未给出满意答案,但毕竟是给了借鉴的东西,分就全给你了。