用mfc寫個程式,訪問FTP路徑,ftp服務端設定的字符編碼為UTF-8,我用CFtpFileFind類下面的getfilename()獲取到目錄下的檔案名(中文),然后用MultiByteToWideChar把utf-8編碼的字符轉為Unicode,但是發現一部分中文可以正確的轉過來,可還有一部分中文顯示為問號。。。求大神指導
uj5u.com熱心網友回復:
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;
}
}
uj5u.com熱心網友回復:
這部分的主要代碼如上uj5u.com熱心網友回復:
大家幫忙看看唄,多謝了!uj5u.com熱心網友回復:
str = str.Left( len); 這是為什么? 屏蔽了看看uj5u.com熱心網友回復:
這里寫的多余了,whar直接轉cstring也一樣。問題應該是出現在getfilename()這里了,這時候獲取的值以及不是完整的UTF8編碼的了uj5u.com熱心網友回復:
可以使用多位元組方式編譯, 僅需 MultiByteToWideChar(CP_UTF8 一次轉換到UNICODE字符應該就可以了我看網上都是 發送 OPTS UTF8 OFF 命令處理的
uj5u.com熱心網友回復:
我之前也試過用多位元組方式編譯,結果也一樣,因為FTP服務端是linux上,要求必須utf8。我最后是沒有用MFC的CFileFind類。出現這個問題的原因應該就是getfilename這里回傳的UTF8編碼的內容就有問題uj5u.com熱心網友回復:
我之前遇到過,多位元組轉換成UTF-8,好像不能直接使用一次MultiByteTOWideChar就行了,轉換后還需要進行一次WideCharToMultiByte轉換到UTF-8,好像是這樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/129712.html
標籤:基礎類
上一篇:求救!!!VBA連接ORACLE資料庫報ORA-12154錯誤,用plsqldev連接正常
下一篇:多檔案生成
