这是对问题的跟进和回答here。我想使用文本文件作为资源,然后将其加载为stringstream
,以便我可以解析它。
以下代码显示了我目前拥有的内容:
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位而不是像CHAR
那样的8位,但我不知道如何解决这个问题。
感谢您的帮助!
答案 0 :(得分:2)
您的评论提供了关键缺失细节。您编译为资源的文件编码为UTF-8
。所以明显的选择是:
MultiByteToWideChar
以转换为UTF-16。然后您可以将其放入wstring
。