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

时间:2014-08-25 11:50:24

标签: c++ string wstring

我已编写了一些代码,但存在一些问题。在这个代码中我试图将字符串转换为wstring。但是这个字符串有"█"字符。这个字符有219个ascii代码。 此转换获得错误。

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

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

如何更正此问题?

...谢谢

1 个答案:

答案 0 :(得分:0)

用于在系统的窄编码和宽编码之间进行转换的C库解决方案使用mbsrtowcs标头中的wcsrtombs<cwchar>函数。我在this answer中拼写了这个。

在C ++ 11中,您可以使用wstring_convert模板,该模板使用合适的codecvt方面进行实例化。不幸的是,这需要一些自定义装配,在cppreference page上列出。

我在这里将其改编为一个自包含的示例,该示例将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;
}