因为Windows提供的MultiByteToWideChar或WideCharToMultiByte虽然可用,但只能在Windows下用,想让程序也能在Linux上跑,因此,不敢用这两个函数.
    请问,有没有其它函数能用?如果有标准C的函数更好了,或者是自实现的也可以.谢谢!

解决方案 »

  1.   

    Windows提供接口进行转换下面得代码就是CString CCharSet::ChangeLanguage(DWORD Source, DWORD Target, CString string)
    {

    UINT one=0;
    UINT two=0;
    DWORD pdwMode=0;
    UCHAR* m_setstr;
    UCHAR* m_getstr;
    HRESULT hr;
    CString m_after = "";
    IMultiLanguage *pMultiLanguage;

    m_setstr = NULL;
    m_getstr = NULL;
    CoInitialize(NULL);
    hr=CoCreateInstance(CLSID_CMultiLanguage ,
        NULL,CLSCTX_ALL,IID_IMultiLanguage ,
        (void**)&pMultiLanguage);
    if( FAILED(hr))
    {
    return "";
    }
    one =string.GetLength();
    m_setstr =(UCHAR*)string.GetBuffer( string.GetLength()); hr=pMultiLanguage->ConvertString(&pdwMode,Source,
     Target,(UCHAR*)m_setstr,
     &one,NULL,&two);
    if( FAILED(hr))
    {
    goto error_data;
    }
    m_getstr=(UCHAR*)malloc( two + 1 );
    memset(m_getstr, '\0', two + 1 ); hr=pMultiLanguage->ConvertString(&pdwMode,Source,
     Target,(UCHAR*)m_setstr,
     &one,m_getstr,&two);
    if( FAILED(hr))
    {
    goto error_data;
    }
    m_after=m_getstr;
    free( m_getstr );error_data:
    string.ReleaseBuffer();
    pMultiLanguage->Release();
    CoUninitialize();
    return m_after;
    }
    调用时候
    UpdateData(TRUE);
    m_strDestLanguage = m_CharSet.ChangeLanguage(10008,65001,m_strSourceLanguage);
    m_strDestLanguage = m_CharSet.ChangeLanguage(65001,932,m_strDestLanguage);
    UpdateData(FALSE);
    65001为UNicode
    10008为GB2312
    932为Shift-JIS
      

  2.   

    To changlele(梦幻水晶) : 我说的是想要Linux能实现的方案,而你给的方法虽然能转换,但实际上还是Windows中的方法,不是我想要的。
    TO  jink(毁人不倦): 就是它了!
    谢谢各位的捧场,结贴。