我先用将其转换为宽字符,然后WideCharToMultiByte(1252,....)发现中文转换为?号

解决方案 »

  1.   

    8859西欧编码中中文使用的是unicode编码,比如汉字“中文”就编码为中文,其中20013就是unicode编码值,所以宽字符到8859的转换就很简单了,给你一个现成的转换代码
    const char* wc2ISO8859_1(const WCHAR*wc,string&s8859)
    {
    //iso8859单个汉字编码最多为8个字节
    int iL=wcslen(wc);
    char ch[8]="&#";
    int nC=0;
    char*szBuf=new char[iL*8+1];
    char*szRst=szBuf;
    // 注意假定当前宽字符使用utf16le编码
    const WCHAR*p=wc;
    while(*p!=0)
    {
    if(*p<256)
    {// 英文字符
    *szRst=*p;
    szRst++;
    }
    else
    {// 中文字符
    nC=strlen(itoa(*p,ch+2,10)); // 中文编码长度
    ch[2+nC]=';';
    memcpy(szRst,ch,3+nC); // 拷贝中文编码
    szRst+=3+nC;
    }
    p++;
    }
    *szRst=0;
    s8859=szBuf;
    delete [] szBuf;
    return s8859.c_str();
    }
      

  2.   

    1252这个codepage是欧洲的字符的(拉丁语系的)
    我不知道iso8859-1是什么编码~~
    你可以在MSDN上去找你需要的codepage