簡體   English   中英

UTF8字符數組轉換為std :: wstring

[英]UTF8 char array to std::wstring

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

當前解決方案

您可以使用std::wstring_convertstring轉換為wstring或從wstring轉換為string ,並使用codecvt指定要執行的轉換。

使用示例:

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字符串(char數組),那么from_bytes()的重載將完全滿足您的要求:

char p[]=u8"Jérôme Ângle";
wstring ws = converter.from_bytes(p);

在線演示

是否可持續?

正如評論中指出的那樣, C ++ 17已棄用了 codecvtwstring_convert實用程序:

這些功能很難正確使用,並且懷疑它們是否正確指定。 用戶應改用專用的文本處理庫。

另外, wstring基於wchar_t ,在Linux系統和Windows系統上, wchar_t編碼有很大不同。

因此,第一個問題是要問為什么根本需要一個wstring ,以及為什么不只在各處保留utf-8

根據原因,您可以考慮使用:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM