我只是想获取x11窗口标题,并将其存储在std :: wstring中。我使用这样的命令来获取标题
auto req_title = xcb_get_property(conn, 0, window, XCB_ATOM_WM_NAME, XCB_GET_PROPERTY_TYPE_ANY, 0, 100);
auto res_title = xcb_get_property_reply(conn, req_title, nullptr);
之后,我可以将标题存储在char数组中。如何将该数组转换为wstring?
答案 0 :(得分:0)
您可以使用std::wstring_convert
使用codecvt
来将string
转换为wstring
,也可以使用Online demo指定要执行的转换。
使用示例:
string so=u8"Jérôme Ângle";
wstring st;
wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> converter;
st = converter.from_bytes(so);
如果您有c字符串(字符数组),则from_bytes()
的重载将完全满足您的要求:
char p[]=u8"Jérôme Ângle";
wstring ws = converter.from_bytes(p);
正如评论中指出的,utf-8 everywhere codecvt
和wstring_convert
实用程序:
这些功能很难正确使用,因此 怀疑是否正确指定了它们。用户应使用 而是专用的文本处理库。
此外,wstring
基于wchar_t
,在Linux系统和Windows系统上,其编码有很大不同。
因此,第一个问题是要问为什么根本需要wstring
,为什么不只保留ICU。
根据原因,您可以考虑使用:
UnicodeString
及其boost.locale提供全面,深入的unicode支持utf_to_utf
及其to_utf
或utf8-cpp,用于常见的与unicode相关的任务。