在我正在研究的項目中,我處理了很多字符串操作;從二進制文件中讀取字符串以及它們的編碼(可以是單字節或雙字節)。本質上,我讀取字符串值爲vector<char>
,讀取編碼,然後將所有字符串轉換爲wstring
,以保持一致性。如何讀取unicode文件名C++的二進制文件?
這工作相當好,但文件名本身可以是雙字節字符。我完全難以理解如何實際打開輸入流。在C中,我將使用_wfopen
函數傳遞wchar_t* path
,但wifstream
似乎行爲不同,因爲它專門爲從文件中讀取雙字節字符而設計,而不是從具有雙字節文件名的文件中讀取單個字節。
這個問題的解決方案是什麼?
編輯:在網絡中搜索,看起來在標準C++中根本不支持這個(例如參見this discussion)。但是我想知道C++ 11是否真的在這個領域增加了一些有用的東西。
我會避免使用'wchar_t'和'wstring',因爲'wchar_t'在編譯器中不可移植(它在VC++中是16位,在gcc中是32位)。 C++ 11引入了'char16_t'和'char32_t',但顯然你可以自己'typedef'。 –
@Matthieu M.我不太擔心VC++,因爲它不是我的目標編譯器之一。我需要先讓代碼在基於unix的系統上工作。 –
這裏是相同的問題,但僅適用於Windows:[如何用unicode文件名打開std :: fstream(ofstream或ifstream)](http://stackoverflow.com/q/821873/33499) – wimh