Qt中QFtp和QURL獲取帶有中文的檔名稱出現亂碼的解決方法
阿新 • • 發佈:2019-01-30
然後在工程的main函式中,QApplication app...下一行寫如下程式碼:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
#ifdef Q_OS_WIN
QTextCodec::setCodecForLocale(QTextCodec::codecForName("gbk"));
#else
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
#endif
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
注意,Windows的本地預設編碼為gbk(如果你用的是中文系統),Linux本地預設編碼為UTF-8。
因此要根據不同的作業系統來進行設定。Linux系統和Mac系統的預設編碼都是UTF-8,因此上面的程式碼沒有區分這兩個作業系統。
轉換函式實現:
- QString FTPCommunicator::_FromSpecialEncoding(const QString &InputStr)
- {
- #ifdef Q_OS_WIN
- return QString::fromLocal8Bit(InputStr.toLatin1());
-
#else
- QTextCodec *codec = QTextCodec::codecForName("gbk");
- if (codec)
- {
- return codec->toUnicode(InputStr.toLatin1());
- }
- else
- {
- return QString("");
- }
- #endif
- }
-
QString FTPCommunicator::_ToSpecialEncoding(const QString &InputStr)
- {
- #ifdef Q_OS_WIN
- return QString::fromLatin1(InputStr.toLocal8Bit());
- #else
- QTextCodec *codec= QTextCodec::codecForName("gbk");
- if (codec)
- {
- return QString::fromLatin1(codec->fromUnicode(InputStr));
- }
- else
- {
- return QString("");
- }
- #endif
- }
當使用QFTP的put方法上傳的時候,目標檔名引數的位置使用_ToSpecialEncoding(正常編碼的字串);
當使用QFTP的get方法下載的時候,目標檔名引數位置也使用上述函式
當使用QFTP遍歷到的檔案作為本地檔名時須使用_FromSpecialEncoding(錯誤編碼的字串);