問題:我想要TagLib :: FileRef在其文件名或路徑中打開一個帶有Unicode字符的文件,但不成功。TagLib - 如何處理UTF-8編碼的文件路徑?
在使用CMake 2.8.4創建Makefile後,我在Windows 7(64位,但是32位編譯器)下使用MinGW(GNU Make 3.81,GCC 4.4.0)編譯TagLib 1.7。我將TagLib與Qt 4.7.2框架結合使用。
對於兩個庫之間交換字符串,標籤庫提供:
#define QStringToTString(s) TagLib::String(s.toUtf8().data(), TagLib::String::UTF8)
#define TStringToQString(s) QString::fromUtf8(s.toCString(true))
// toUtf8() is a fix, originally spelled utf8(), but that's not relevant here.
我構造的TagLib :: FileRef如下:用含Unicode字符或拉丁路徑
TagLib::FileRef fileRef(QStringToTString(filePath).toCString(true));
// or:
TagLib::FileRef fileRef(TagLib::FileName(QStringToTString(filePath).toCString(true)));
其結果是,文件在UTF-8表示(f.ex.元音變音或中文字符)中使用不同代碼的-1個字符未能加載(fileRef.isNull())。
如果我通過false到上面的函數toCString()(聲明:見下文),TagLib可以處理單音節符號(但不是純Unicode字符)。因此,我想我錯誤地編譯了TagLib(TagLib :: FileRef將給定的字符串解釋爲Latin-1),但是我不知道如何檢查甚至糾正它。注意:使用TagLib可以正確檢索(ID3)標籤中的Unicode字符串。
toCString():
const char* TagLib::String::toCString(bool unicode = false) const;
Thanks,'TagLib :: FileRef fileRef(reinterpret_cast(filePath.constData()));'在Windows下工作良好。我打算在不同的系統上運行它;將'QFile :: encodeName()'可能UTF-8編碼這個? –
bibermann
2011-04-20 12:50:48
是的,現在大多數其他系統都使用UTF-8文件名,但它通常取決於用戶的設置,所以你不能認爲它是UTF-8。 – 2011-04-20 17:44:14