非常感谢
3 个解决方案
#1
http://blog.csdn.net/flyffa/archive/2005/03/16/321285.aspx
#2
俺对各种字符的转换还清楚,但是俺现在不懂这个编码。在网上看了半天还没看懂。
#3
刚才搜了一会儿,原来这iso 8859-1编码,windows是用拉丁-1支持的,这样使用multibytetowidechar将char转为utf16格式,再用WideCharToMultiByte转为iso 8895-1就可以了。
这一段程序,可以实现,但是俺没有使用过,所以不敢保证正确,第一个参数写上要转换的串,第二写936,第三个参数写1252。
CString Convert(CString str, int sourceCodepage, int targetCodepage)
{
int len=str.GetLength();
int unicodeLen=MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0);
wchar_t * pUnicode;
pUnicode=new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
MultiByteToWideChar(sourceCodepage,0,str,-1,(LPWSTR)pUnicode,unicodeLen);
BYTE * pTargetData;
int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);
pTargetData=new BYTE[targetLen+1];
memset(pTargetData,0,targetLen+1);
WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);
CString rt;
rt.Format("%s",pTargetData);
delete pUnicode;
delete pTargetData;
return rt;
}
#1
http://blog.csdn.net/flyffa/archive/2005/03/16/321285.aspx
#2
俺对各种字符的转换还清楚,但是俺现在不懂这个编码。在网上看了半天还没看懂。
#3
刚才搜了一会儿,原来这iso 8859-1编码,windows是用拉丁-1支持的,这样使用multibytetowidechar将char转为utf16格式,再用WideCharToMultiByte转为iso 8895-1就可以了。
这一段程序,可以实现,但是俺没有使用过,所以不敢保证正确,第一个参数写上要转换的串,第二写936,第三个参数写1252。
CString Convert(CString str, int sourceCodepage, int targetCodepage)
{
int len=str.GetLength();
int unicodeLen=MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0);
wchar_t * pUnicode;
pUnicode=new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
MultiByteToWideChar(sourceCodepage,0,str,-1,(LPWSTR)pUnicode,unicodeLen);
BYTE * pTargetData;
int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);
pTargetData=new BYTE[targetLen+1];
memset(pTargetData,0,targetLen+1);
WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);
CString rt;
rt.Format("%s",pTargetData);
delete pUnicode;
delete pTargetData;
return rt;
}