关于MFC项目编码有关问题
关于MFC项目编码问题
下面的代码项目编码是多字节,现在要转成unicode编码,
在
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, result, strlen( result), NULL, 0);
报错
“strlen”: 不能将参数 1 从“CString”转换为“const char *”
还有,不能将参数 3 从“CString”转换为“LPCSTR”
在
for (p=strtok(str,_T(";"));p!=NULL;p=strtok(NULL,_T(";")))处
报错“strtok”: 不能将参数 1 从“wchar_t *”转换为“char *”
不能将参数 2 从“const wchar_t [2]”转换为“const char *”
求大神???新手,希望详细点
------解决方案--------------------
老兄,基础知识要温故一下咯。
“strlen”: 不能将参数 1 从“CString”转换为“const char *” -- 这个当然不行咯,直接用GetLength方法
还有,不能将参数 3 从“CString”转换为“LPCSTR” -- 还是类型的问题,用GetBuffer。
都不知道你这里的CString到底是不是unicode的。。。
------解决方案--------------------
最简单的解决办法:
在工程项目属性中
将 字符集(Character Set)由Use Unicode Character Set改为Use Multi-Byte Character Set
下面的代码项目编码是多字节,现在要转成unicode编码,
在
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, result, strlen( result), NULL, 0);
报错
“strlen”: 不能将参数 1 从“CString”转换为“const char *”
还有,不能将参数 3 从“CString”转换为“LPCSTR”
在
for (p=strtok(str,_T(";"));p!=NULL;p=strtok(NULL,_T(";")))处
报错“strtok”: 不能将参数 1 从“wchar_t *”转换为“char *”
不能将参数 2 从“const wchar_t [2]”转换为“const char *”
求大神???新手,希望详细点
CStdioFile file;
CString filePathName;
int row;
CString result;
//生成一个对话框
lpszOpenFile = new CFileDialog
(TRUE,L"",L"",OFN_FILEMUSTEXIST |OFN_HIDEREADONLY , L"文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|");
if(lpszOpenFile->DoModal() == IDOK )//假如点击对话框确定按钮
{
filePathName = lpszOpenFile->GetPathName();//得到打开文件的路径
SetWindowText(filePathName);//在窗口标题上显示路径
}
if(filePathName == "") return;
if(!file.Open(filePathName,CFile::modeRead))
{
MessageBox(L"can not open file!");
return;
}
CString strLine,strTemp;
row = 0;
while(file.ReadString(strLine))
{
wchar_t *str = strLine.GetBufferSetLength(strLine.GetLength());
char *p;
if(strLine!=_T(""))
{
for (p=strtok(str,_T(";"));p!=NULL;p=strtok(NULL,_T(";")))
{
strTemp = p;
result+=strTemp;
}
row ++;
}
}
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, result, strlen( result), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
//转换
::MultiByteToWideChar(CP_UTF8, NULL, result, strlen( result), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] =_T('\0');
//unicode版的MessageBox API
::MessageBoxW(GetSafeHwnd(), wszString, wszString, MB_OK);
delete lpszOpenFile;//释放分配的对话框
------解决方案--------------------
老兄,基础知识要温故一下咯。
“strlen”: 不能将参数 1 从“CString”转换为“const char *” -- 这个当然不行咯,直接用GetLength方法
还有,不能将参数 3 从“CString”转换为“LPCSTR” -- 还是类型的问题,用GetBuffer。
都不知道你这里的CString到底是不是unicode的。。。
------解决方案--------------------
最简单的解决办法:
在工程项目属性中
将 字符集(Character Set)由Use Unicode Character Set改为Use Multi-Byte Character Set