将ISO-2022-CN字符集转换成GBK的源代码

2014-11-23 23:40:17 · 作者: · 浏览: 4
将ISO-2022-CN字符集转换成GBK的源代码
泰岩网络工作室
同事用的是Apple操作 系统,发出来的邮件在我的系统中经常会有乱码。仔细看了下邮件内容,发现是邮件中使用的字符集是ISO-2022-CN。上网查了下,发现这东西在国内使用的很少,尤其是在Windows平台上,根本没提供现成的解码函数。想找个开源的相关代码,翻了半天,未果。
今天有空,终于抽出时间写出了这个解码函数,供大家参考。
//ISO-2022-CN - 中文  
//    ESC $ ) A 转为GB 2312-1980  
//    ESC $ ) G 转为CNS 11643-1992第一字面  
//    ESC $ * H 转为CNS 11643-1992第二字面  
//ISO-2022-CN-EXT - 于ISO-2022-CN的基础上,加上以下六组逃逸字串  
//    ESC $ ) E 转为ISO-IR-165  
//    ESC $ + I 转为CNS 11643-1992第三字面  
//    ESC $ + J 转为CNS 11643-1992第四字面  
//    ESC $ + K 转为CNS 11643-1992第五字面  
//    ESC $ + L 转为CNS 11643-1992第六字面  
//    ESC $ + M 转为CNS 11643-1992第七字面  
CString CTaiyanWebString::Iso2022cn2Gbk(const char *pSrc)  
{  
    CStringA strDest;  
    char *pDest = strDest.GetBufferSetLength(strlen(pSrc));  
  
    bool bIsConvert = false;  
  
    while(*pSrc)  
    {  
        switch(*pSrc)  
        {  
        case 0x1b:              // 
字符集信息 pSrc += 4; // 字符集信息此处未做处理,建议以后补上 break; case 0x0e: // 转换开始 ++pSrc; bIsConvert = true; break; case 0x0f: // 转换结束 ++pSrc; bIsConvert = false; break; default: *pDest++ = bIsConvert (*pSrc++ | 0x80) : (*pSrc++); break; } } *pDest = 0; strDest.ReleaseBuffer(); return CString(strDest); }