工程项目是unicode字符集,WritePrivateProfileString(_T("main"), _T("carnum"), _T("豫一二三"), g_prSetupInfo.m_strPlateInfo);的时候中文能写入文件,而WritePrivateProfileString(_T("main"), _T("carnum"), _T("豫"), g_prSetupInfo.m_strPlateInfo);时中文显示就是乱码。请问是什么原因啊,在线等。
调试欢乐多
ansi,gb2312,gbk,gb18030,unicode,utf-8,unicode big endian编码的区别
最后几段提到的“联通”现象。
然后我又试试了这样行CFile file(_T("E:\\liutest\\d10\\test.ini"), CFile::modeRead | CFile::modeWrite | CFile::modeCreate);
file.SeekToBegin();
WCHAR s = 0xFEFF;
file.Write(&s, 1);
file.Close();
WritePrivateProfileString(_T("main"), _T("carnum"), _T("豫"), _T("E:\\liutest\\d10\\test.ini"));
不过多了一个开始换行。
CString str = _T("豫");
int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, str, wcslen(str), NULL, 0, NULL, NULL);
char* szU8 = new char[u8Len + 1];
::WideCharToMultiByte(CP_UTF8, NULL, str, wcslen(str), szU8, u8Len, NULL, NULL);
szU8[u8Len] = '\0';
WritePrivateProfileStringA("main", "carnum", szU8, "d:\\1.ini");将配置项转换成UTF-8,然后调用WritePrivateProfileString的ANSI版本也可以,显示正常。
你可以写个自己的函数
MyWritePrivateProfileString
在此函数中保存转换和保存也是可以的。