Qt
中用fopen
開啓帶中文路徑的檔案時,總是失敗。
perror()
出錯提示爲:no such file or directory
用QFile
不存在不此問題。
解決方法:
fopen
是C
標準庫的一個函數,函數內部是系統呼叫。Windows
中呼叫CreateFile
;Linux
中呼叫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");
}