2012年7月3日 星期二

qdir 無法讀取中文檔名

可能需要兩個條件才能解決:

LANG="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

以下提的是 linux 環境, 沒有看 source code, 是猜的。

在 linux 上 (unix like), qt 使用 opendir(), readdir(), closedir() 來讀取目錄, 接著 qt 會使用 QTextCodec 來轉換讀取的檔名, 轉換失敗, 自然 QDir 就不會傳回該檔名, 所以在什麼樣的環境會轉換失敗呢?

例如檔名以 big5 編碼, 而選用了 utf8 QTextCodec, 自然會產生問題, 那要怎麼確認, 這應該只有看 source code 才能知道 qt 如何實作, 不過只要確定檔名是以 utf8 編碼, 使用上述的程式碼強制 qt 使用 utf8 QTextCodec, 那就沒問題了。

那怎麼確認檔名的編碼呢?嗯 ... 這是使用者自己要知道的, 別人怎麼會知道你系統的環境呢?不過別擔心, 在現今的 linux 環境下, 大多是 utf8 的檔名編碼, 在 ms windows 下呢?嗯 ... 好像就不是這樣, 沒特別研究, 還是讓專業的來說明好了。

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。