繁体   English   中英

如何在C ++中将字符串转换为wstring

[英]How to convert string to wstring in C++

我已经编写了一些代码,但是存在一些问题。 在这段代码中,我试图将字符串转换为wstring。 但是此字符串具有“█”字符。 该字符具有219位ASCII码。 此转换出错。

在我的代码中: string strs= "█and█something else"; wstring wstr(strs.begin(),strs.end()); string strs= "█and█something else"; wstring wstr(strs.begin(),strs.end());

调试后,我得到这样的结果?and?something else

我该如何解决这个问题?

谢谢...

用于在系统的窄编码和宽编码之间进行转换的C库解决方案使用<cwchar>标头中的mbsrtowcswcsrtombs函数。 我已经在这个答案中阐明了这一点

在C ++ 11中,可以使用以适当的codecvt构面实例化的wstring_convert模板。 不幸的是,这需要一些自定义装配,这在cppreference页面上有详细说明。

我在这里将其改编成一个自包含的示例,该示例将wstring转换为string ,从系统范围转换为系统范围狭窄的编码:

#include <iostream>
#include <string>
#include <locale>
#include <codecvt>

// utility wrapper to adapt locale-bound facets for wstring/wbuffer convert
template <typename Facet>
struct deletable_facet : Facet
{
    using Facet::Facet;
};

int main()
{
    std::wstring_convert<
        deletable_facet<std::codecvt<wchar_t, char, std::mbstate_t>>> conv;

    std::wstring ws(L"Hello world.");
    std::string ns = conv.to_bytes(ws);

    std::cout << ns << std::endl;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM