读取ini文件的属性值(中文)问乱码

mike_digilink 2013-04-15 12:29:07
我调用下面的接口,从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 加载图标资源时就失败了 ,不知什么原因
...全文
4019 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mike_digilink 2013-04-17
  • 打赏
  • 举报
回复
引用 11 楼 CharlesSimonyi 的回复:
你的INI文件是什么编码。打开INI文件,另存为,下面选择编码。如果你的程序非UNICODE,就选择ANSI,如果你的程序时UNICODE就选择UNICODE,另存为以后再读取。UTF-8的编码在VC里面无法正常显示。需要转换为ANSI或UNICODE
thanks
encoderlee 版主 2013-04-17
  • 打赏
  • 举报
回复 2
你的INI文件是什么编码。打开INI文件,另存为,下面选择编码。如果你的程序非UNICODE,就选择ANSI,如果你的程序时UNICODE就选择UNICODE,另存为以后再读取。UTF-8的编码在VC里面无法正常显示。需要转换为ANSI或UNICODE
范特西 2013-04-16
  • 打赏
  • 举报
回复
读文件跟格式有关,UNICODE?utf8?还widestring?
穿跑鞋不跑步 2013-04-15
  • 打赏
  • 举报
回复
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; } }
shen_wei 2013-04-15
  • 打赏
  • 举报
回复
TCHAR Buf[]; ::GetPrivateProfileString(Section,Item,Buf,Buf,MAX_PATH,m_FilePath);
sumos 2013-04-15
  • 打赏
  • 举报
回复
char buff[256]; GetPrivateProfileString("CAPTION", "TEXT", "", buff, 256, path); printf_s("[CAPTION]\nTEXT=%s\n",buff); use like this
mike_digilink 2013-04-15
  • 打赏
  • 举报
回复
UTF-8 无BOM格式编码
  • 打赏
  • 举报
回复
写文件的时候用的什么编码?
mike_digilink 2013-04-15
  • 打赏
  • 举报
回复
引用 3 楼 lhfslhfs 的回复:
::GetProfileString(_T("cs") ,_T("code") ,_T("70") ,mima.GetBuffer(100) ,100);
这种方式指定不了 配置文件
青松2 2013-04-15
  • 打赏
  • 举报
回复
::GetProfileString(_T("cs") ,_T("code") ,_T("70") ,mima.GetBuffer(100) ,100);
mike_digilink 2013-04-15
  • 打赏
  • 举报
回复
用这个方式 还是跟原来的一样
青松2 2013-04-15
  • 打赏
  • 举报
回复
用GetPrivateProfileStringW(UNICODE)试一下。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧