我调用下面的接口,从ini配置文件中读取相关的属性值
CString icon_name; 
GetPrivateProfileString(szTypeName,szIconName,"",icon_name.GetBuffer(MAX_PATH),MAX_PATH,strIniPath);配置文件内容如下:
[devtree]
wendu=wendu.ico
shidu=湿度.ico读取键值为wendu的图标可以正常显示,当读到shidu的图标时,icon_name 返回的是乱码,由于返回了乱码,
我用LoadImage 加载图标资源时就失败了 ,不知什么原因读取ini配置文件出现乱码

解决方案 »

  1.   

    用GetPrivateProfileStringW(UNICODE)试一下。
      

  2.   

    ::GetProfileString(_T("cs")  ,_T("code") ,_T("70") ,mima.GetBuffer(100) ,100);
      

  3.   

    char buff[256];
    GetPrivateProfileString("CAPTION", "TEXT", "", buff, 256, path);
    printf_s("[CAPTION]\nTEXT=%s\n",buff);
    use like this
      

  4.   


    TCHAR Buf[];
    ::GetPrivateProfileString(Section,Item,Buf,Buf,MAX_PATH,m_FilePath);
      

  5.   

    void CMyDlg::UTFTOGB(CString &szstr) // UTF-8转GB2312
    {
    WCHAR* strSrc = NULL;
    TCHAR* szRes = NULL;
    //MultiByteToWideChar()的第四个形参设为-1,即可返回所需的短字符数组空间的大小
    //UTF8转化成Unicode
    int i = MultiByteToWideChar(CP_UTF8, 0, szstr.GetBuffer(szstr.GetLength()), -1, NULL, 0);
    strSrc = new WCHAR[i + 1];
    ZeroMemory(strSrc, (i + 1) * sizeof(WCHAR));
    MultiByteToWideChar(CP_UTF8, 0, szstr.GetBuffer(szstr.GetLength()), -1, strSrc, i);
    szstr.ReleaseBuffer();
      //Unicode 转化成 GB2312
    //WideCharToMultiByte()的第四个形参设为-1,即可返回所需的短字符数组空间的大小
    i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
    szRes = new TCHAR[i + 1];
    ZeroMemory(szRes, (i + 1) * sizeof(TCHAR)); 
    WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);
    szstr = szRes;
    if(strSrc != NULL)
    {
    delete [] strSrc;
    strSrc = NULL;
    }
    if(szRes != NULL)
    {
    delete [] szRes;
    szRes = NULL;
    }}
      

  6.   

    读文件跟格式有关,UNICODE?utf8?还widestring?
      

  7.   

    你的INI文件是什么编码。打开INI文件,另存为,下面选择编码。如果你的程序非UNICODE,就选择ANSI,如果你的程序时UNICODE就选择UNICODE,另存为以后再读取。UTF-8的编码在VC里面无法正常显示。需要转换为ANSI或UNICODE