您的位置:首页 > 编程语言 > C语言/C++

vc++6.0 将CString 转换成 Unicode 的字符串,ANSI编码 和 unicode编码 互转

2010-09-08 10:01 507 查看
一. 使用vc++6.0 调用vs2008 c++写的dll,6.0默认的编码是ANSI编码,2008默认的都是unicode编码,所以参数处理的时候会有问题。

下面是两种方法将cstring转成unicode的

方法1:

//ANSI字符转为Unicode字符,用MultiByteToWideChar
CString strTmp;
CString m_ANSI = "你好!测试,hello";
DWORD dwNum;
dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, NULL, 0);
wchar_t *pwText;
pwText = new wchar_t[dwNum];
dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, pwText, dwNum);
//unicode内容在pwText中,下面显示代码
CString m_Unicode = "";
for(int i = 0; i < (int)dwNum - 1; i++)
{
strTmp.Format("%04X ", pwText[i]);
m_Unicode += strTmp;
}
delete[] pwText;


方法2(我使用的:)

CString   str= "sfdkjasfdjk ";
BSTR   bstr=str.AllocSysString();
//bstr就是UNICODE文本了!
//用完以后要释放
SysFreeString(bstr);


二、如果你用的是vc6.0调用vs2008,就是ansi编码的调用unicode编码的函数,返回来的是unicode的值,需要将unicode转换成ansi编码。相反可以用这个MultiByteToWideChar函数。

wcharText = new char[4000];
GetPageText(i,wcharText, nTxtLen);//调用函数以后变成了wchar,就是unicode编码的
int nBufLen = WideCharToMultiByte(936, 0, (const unsigned short *)wcharText, -1, NULL, 0, NULL, NULL);
char* charTxt = new char[nBufLen];
WideCharToMultiByte(936, 0, (const unsigned short *)wcharText, -1, charTxt, nBufLen, NULL, NULL);


参考:

1.http://www.cnitblog.com/_skyfly/archive/2010/09/06/2657.html
我最近正在将以前的项目转为UNICODE编码格式

2.http://blog.csdn.net/massice/archive/2009/10/09/4647613.aspx
临时记录--MultiByteToWideChar,WideCharToMultiByte

3.调试vc6.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: