访问FTP下路径,部分中文显示为问号 用mfc写个程序,访问FTP路径,ftp服务端设置的字符编码为UTF-8,我用CFtpFileFind类下面的getfilename()获取到目录下的文件名(中文),然后用MultiByteToWideChar把utf-8编码的字符转为Unicode,但是发现一部分中文可以正确的转过来,可还有一部分中文显示为问号求大神指导 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CFtpFileFind finder(m_pFtpConnection);CString strFileName = _T("");strFileName = finder.GetFileName();USES_CONVERSION;char* pFileName = T2A(strFileName);CharArrayToCString(pFileName, strFileName,CP_UTF8);void CSelFtpDirDlg::CharArrayToCString(const char* pChar, CString& str, int encodeType){ if(pChar != NULL) { size_t len = strlen(pChar); size_t wcharCount =(size_t)MultiByteToWideChar(encodeType, 0, (const char *)pChar, len, NULL, 0); USES_CONVERSION; WCHAR* szTemp = new WCHAR[wcharCount + 1]; szTemp[wcharCount] = 0; MultiByteToWideChar(encodeType, 0, (const char *)pChar, (int)len, szTemp, (int)wcharCount); char* pmtStr = W2A(szTemp); str = (CString)pmtStr; str = str.Left( len); delete []szTemp; }} str = str.Left( len); 这是为什么? 屏蔽了看看 这里写的多余了,whar直接转cstring也一样。问题应该是出现在getfilename()这里了,这时候获取的值以及不是完整的UTF8编码的了 可以使用多字节方式编译, 仅需 MultiByteToWideChar(CP_UTF8 一次转换到UNICODE字符应该就可以了我看网上都是 发送 OPTS UTF8 OFF 命令处理的 我之前也试过用多字节方式编译,结果也一样,因为FTP服务端是linux上,要求必须utf8。我最后是没有用MFC的CFileFind类。出现这个问题的原因应该就是getfilename这里返回的UTF8编码的内容就有问题 我之前遇到过,多字节转换成UTF-8,好像不能直接使用一次MultiByteTOWideChar就行了,转换后还需要进行一次WideCharToMultiByte转换到UTF-8,好像是这样。 _lread,_lclose,_lseek,这几个函数,请高人解说一下 多连接socket关闭问题!!!急!!!高手帮忙 关于指向数组成员的成员指针的疑惑~~~ 挑战图像检索问题 求助! 现在哪里还能买到 visual c++技术内幕(第四版)潘爱民译 简单问题 串口 + WAVECOM WISMO2C2-G900/1800 + 手机短信编程, 救命!!!!!!!!! vc视频播放图像显示底层用什么函数? C.ClassA::m_data1=111是什么意思?? 怎么最快掌握c++ 多文档生成 请教大神,我通过点击按钮打开ie浏览器,怎么实现???
strFileName = finder.GetFileName();
USES_CONVERSION;
char* pFileName = T2A(strFileName);
CharArrayToCString(pFileName, strFileName,CP_UTF8);
void CSelFtpDirDlg::CharArrayToCString(const char* pChar, CString& str, int encodeType)
{
if(pChar != NULL)
{
size_t len = strlen(pChar);
size_t wcharCount =(size_t)MultiByteToWideChar(encodeType, 0, (const char *)pChar, len, NULL, 0); USES_CONVERSION;
WCHAR* szTemp = new WCHAR[wcharCount + 1];
szTemp[wcharCount] = 0;
MultiByteToWideChar(encodeType, 0, (const char *)pChar, (int)len, szTemp, (int)wcharCount);
char* pmtStr = W2A(szTemp);
str = (CString)pmtStr;
str = str.Left( len);
delete []szTemp;
}
}
WideCharToMultiByte转换到UTF-8,好像是这样。