【问题标题】:How to convert string to wstring in C++如何在 C++ 中将字符串转换为 wstring
【发布时间】:2014-10-18 13:34:35
【问题描述】:

我编写了一些代码,但出现了一些问题。在这段代码中,我试图将字符串转换为 wstring。但是这个字符串有“█”个字符。这个字符有 219 个 ascii 码。 此转换出现错误。

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

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

我该如何解决这个问题?

谢谢...

【问题讨论】:

  • 这是一个旧的pre-C++11 answer。对于 C++11,使用内置的 codecvt facet 有一种稍微简单的方法。

标签: c++ string wstring


【解决方案1】:

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

在 C++11 中,您可以使用通过合适的 codecvt 构面实例化的 wstring_convert 模板。不幸的是,这需要一些自定义绑定,这在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;
}

【讨论】:

  • 感谢您的关注。但我必须将字符串转换为 wstring。我不确定您的代码是否将字符串转换为 wstring。我可以试试这段代码。
  • @Mehmet:查看文档。 to_bytesfrom_bytes.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2019-06-09
  • 2017-12-12
相关资源
最近更新 更多