Qt中用fopen 開啓帶中文路徑的檔案失敗的解決方法

2020-08-12 15:22:25

Qt中用fopen開啓帶中文路徑的檔案時,總是失敗。
perror()出錯提示爲:no such file or directory

QFile不存在不此問題。

解決方法:
fopenC標準庫的一個函數,函數內部是系統呼叫。Windows中呼叫CreateFileLinux中呼叫open
Linux的系統編碼爲UTF-8,程式中統一UTF-8編碼就可以正常開啓檔案,中文亂碼問題也能解決。
Windows的系統編碼爲GBK,如果檔名稱是Unicode編碼,那麼在呼叫fopen前就必須要先把檔名稱編碼轉爲GBK,否則就開啓失敗。
Qt 中預設的編碼爲UTF-8,故在windows下需要先轉碼才能 纔能打正確開啓。

修改如下:
新增標頭檔案 include<QTextCodec>

QTextCodec *code = QTextCodec::codecForName("GB2312");
std::string name = code->fromUnicode(getMapFilePath).data();

FILE *fp = fopen(name.c_str(),"rb");
if (!fp) {
    perror("open failure");
}