关于剪贴板的中文乱码的大问题!解决立马给分!

tangtangtangbaoli 2006-02-27 08:13:29
代码如下:
HANDLE hClip;
CString str;
str = "中国";
if(OpenClipboard())
{
EmptyClipboard();
hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
char *pData=(char*)GlobalLock(hClip);
strcpy(pData,(const char*)str);
GlobalUnlock(hClip);
SetClipboardData(CF_TEXT,hClip);
CloseClipboard();
}
从剪贴板拷贝到记事本,word下中文就乱码,而拷贝
到ultraedit,以及vc下文本编辑环境就不是乱码,看到“中国”,
如何解决亚!!多谢给分!!
...全文
975 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangtangtangbaoli 2006-02-28
  • 打赏
  • 举报
回复
太感谢lanphaday(恋花蝶)了!我再另开贴送你余下的180分!
赖勇浩 2006-02-27
  • 打赏
  • 举报
回复
楼主好小气,难怪有星星的都不回答啦,当然我有这个问题的时候,是大出血200分的。
赖勇浩 2006-02-27
  • 打赏
  • 举报
回复
才20分啊,太少了!
赖勇浩 2006-02-27
  • 打赏
  • 举报
回复
唉,还是要我来解决,楼主,把分全给我吧。

会这样的原因是当复制到剪贴板的时候那个程序使用的不是中文输入法,那么复制的时候就会以英文(一般情况下)编码,再复制回来的时候,内码已经变了,自然成了乱码。UE能正确显示是因为它自动兼容多种中文内码。解决方式如下:
1,你可以把中文输入法设置为默认的输入法,再运行你的代码,肯定不会乱码的,但这种方法太笨了,不可能要求客户这样的嘛,对不对?所以要看方法2,这个方法仅作为测试之用,测试成功,记得给分。
2,根据上面的情况,可以只要是中文输入法环境下复制中文就没有问题,那么我们可以调用API把输入法选择为中文输入法(任一皆可,拼音五笔都没有问题)。复制之后再用API设置为原来的输入法。Copy到某一程序的时候,那个程序可以是任意输入法的。这两三个API为IME开头的什么keyboardlayout的函数,你google一下,找到这样的函数名再去MSDN看看用法,很快就解决了。

好了,打得好累,记得给分啊。
tangtangtangbaoli 2006-02-27
  • 打赏
  • 举报
回复
明早揭贴,我现在在家用xps1的记事本,winword,就没有中文乱码,怎么办公室的xp老版本的记事本,和winword就出现中文乱码了!!
lanhanNO_1 2006-02-27
  • 打赏
  • 举报
回复
我第一次是个M~什么的 他的源码
后来同样的 他的源码...没问题
lanhanNO_1 2006-02-27
  • 打赏
  • 举报
回复
_UNICODE方式要重写就不试了
有兴趣的
UP
lanhanNO_1 2006-02-27
  • 打赏
  • 举报
回复
(const char*)str是_MBCS方式下的
_UNICODE不能编译成功

CF_OEMTEXT Text format containing characters in the OEM character set. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.

CF_UNICODETEXT Windows NT/2000/XP: Unicode text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.

CF_TEXT Text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data. Use this format for ANSI text.
能找到的

下面是试验的一些
#include "stdafx.h"
#include "atlstr.h"
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hClip;
CString str;
str = "\3";
if(::OpenClipboard(NULL))
{
EmptyClipboard();
hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
char *pData=(char*)GlobalLock(hClip);
//memset(pData,0,str.GetLength()+1);
str.AnsiToOem();
strcpy(pData,(const char*)str);
GlobalUnlock(hClip);
SetClipboardData(CF_TEXT,hClip);
CloseClipboard();
}
printf("%s",str);
return 0;
}

就字符集有些差异 原来前几天找心型的在OEM字符集
我只是告诉他是控制符,可以显示,可能是任意的
那位朋友对不住了
Kid4you 2006-02-27
  • 打赏
  • 举报
回复
没有问题啊...是不是那个_T造成的? 我在英文XP下测试也没问题.
lanhanNO_1 2006-02-27
  • 打赏
  • 举报
回复
晕就第一次有问题
str = "中国";
也没问题了
lanhanNO_1 2006-02-27
  • 打赏
  • 举报
回复
编译方式不一样
str =_T("中国");
lanhanNO_1 2006-02-27
  • 打赏
  • 举报
回复
HANDLE hClip;
CString str;
str =_T("中国");
if(::OpenClipboard(NULL))
{
EmptyClipboard();
hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
char *pData=(char*)GlobalLock(hClip);
strcpy(pData,(const char*)str);
GlobalUnlock(hClip);
SetClipboardData(CF_TEXT,hClip);
CloseClipboard();
}
清歌谁与和 2006-02-27
  • 打赏
  • 举报
回复
我运行你的代码没有问题啊
拷贝到word,记事本都能看见"中国"

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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