【问题标题】:STL string conversion between wstring and stringwstring和string之间的STL字符串转换
【发布时间】:2013-08-08 12:24:29
【问题描述】:

我想知道这是否足以在生产代码库中使用?

std::wstring s2w(const std::string& s)
{
    std::wstring ws;
    ws.assign(s.begin(), s.end());
    return ws;
}

std::string w2s(const std::wstring& w)
{
    std::string s;
    s.assign(w.begin(), w.end());
    return s;
}

【问题讨论】:

  • AFAIK,不,这还不够,因为它不进行任何转换(仅缩小)。您必须在窄字符串编码和宽字符串编码之间进行真正的转换。例如,使用codecvt<wchar_t,char,mbstate_t>,在C++11中可能与wstring_convert结合使用。

标签: string stl wstring


【解决方案1】:

不,这还不够。

考虑一个包含以下字符的wstring(为清楚起见,使用数字值) { 0x41, 0x1243, 0x62 }(如果您使用的是 Unicode,则为“A”,然后是 ETHIOPIC SYLLABLE QAA,然后是“b”)。

使用您的例程转换为string 将导致包含{ 0x41, 0x43, 0x42 } 或“ACb”的序列。可能不是您所期望或想要的。

正如 DyP 所说 - 您没有进行任何转换,只是缩小了范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多