vc中如何将一个char串转换为ISO8859_1编码格式的字符串,并且求其长度

时间:2021-05-27 08:43:51
vc中如何将一个char串转换为ISO8859_1编码格式的字符串,并且求其长度,请给出源码哈
非常感谢

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;       

}