0
這是一個問題的後續問題,並回答了here。我想使用文本文件作爲資源,然後將其加載爲stringstream
,以便我可以解析它。作爲wstringstream加載Win32資源文件
下面的代碼顯示了我目前有:
std::string filename("resource.txt");
HRSRC hrsrc = FindResource(GetModuleHandle(NULL), filename.c_str(), RT_RCDATA);
HGLOBAL res = LoadResource(GetModuleHandle(NULL), hrsrc);
LPBYTE data = (LPBYTE)LockResource(res);
std::stringstream stream((LPSTR)data);
不過,我不確定如何延長這個使用wstringstream
讀取一個Unicode文本文件。天真的方法產生亂碼:
...
LPBYTE data = (LPBYTE)LockResource(res);
std::wstringstream wstream((LPWSTR)data);
由於LPBYTE
無非是CHAR*
,更是毫不奇怪的是,這並不工作,但資源天真地轉換爲WCHAR*
(LPWSTR
)無法正常工作或:
...
LPWSTR data = (LPWSTR)LockResource(res);
std::wstringstream wstream(data);
我猜這是因爲WCHAR
是16位,而不是8位像CHAR
,但我不知道如何解決這個問題。
感謝您的幫助!
什麼是您的資源文件的編碼?如果它的ASCII或UTF8,那麼你需要一個明確的轉換(如'MultiByteToWideChar')來讀取它作爲一個unicode字符序列。 – riv
只要'resource.txt'實際上是UTF-16編碼,你提出的兩種解決方案都可以工作。既然你得出的結論是「沒有人工作」*,如果你解釋了什麼不起作用(預期結果和實際結果是什麼?),這將有所幫助。 – IInspectable
我的'resource.txt'文件是用UTF-8編碼的,所以上面的代碼片段給了我一串任意字符。我正在尋找的結果是獲取文件內容的「wstring」,並將其存儲在「wstringstream」中。 – mhjlam