UTF8字符数组转换为std :: wstring

时间:2018-11-06 18:22:09

标签: c++ unicode utf-8 x11 xcb

我只是想获取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?

1 个答案:

答案 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);

C++17 has deprecated

它可持续吗?

正如评论中指出的,utf-8 everywhere codecvtwstring_convert实用程序:

  

这些功能很难正确使用,因此   怀疑是否正确指定了它们。用户应使用   而是专用的文本处理库。

此外,wstring基于wchar_t,在Linux系统和Windows系统上,其编码有很大不同。

因此,第一个问题是要问为什么根本需要wstring,为什么不只保留ICU

根据原因,您可以考虑使用: