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

3
我编写了一些代码,但是出现了问题。在这段代码中,我试图将字符串转换为宽字符串(wstring),但是这个字符串中有 "█" 字符。这个字符的 ASCII 码是219。因此,转换操作失败了。
在我的代码中: string strs= "█and█something else"; wstring wstr(strs.begin(),strs.end()); 调试后,我得到了以下结果: ?and?something else 请问如何解决这个问题?
谢谢...

这是一个旧的 C++11 之前的回答。使用 C++11,可以使用内置的 codecvt facet 更轻松地实现。 - Kerrek SB
1个回答

1
C库提供了在系统的窄字符编码和宽字符编码之间转换的解决方案,使用头文件中的mbsrtowcs和wcsrtombs函数。 我已经在这个答案this answer中详细说明了这一点。
在C ++ 11中,您可以使用实例化了适当codecvt facet的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;
}

谢谢您的关注。但我必须将字符串转换为宽字符串。我不确定您的代码是否可以将字符串转换为宽字符串。我可能会尝试这段代码。 - Mehmet
@Mehmet:查阅文档。to_bytesfrom_bytes - Kerrek SB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接