Codecvt不是std标头吗?

该代码可使用Visual C ++ 11进行编译,并可以在Windows 7上按预期运行,但是无法使用Windows 7上的MinGW 4.7.0或Linux上的gcc 4.8.0进行编译。 编译为-std=c++11标志

#include <codecvt>
#include <string>

// convert UTF-8 string to wstring
std::wstring utf8_to_wstring (const std::string& str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
    return myconv.from_bytes(str);
}

// convert wstring to UTF-8 string
std::string wstring_to_utf8 (const std::wstring& str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
    return myconv.to_bytes(str);
}

错误:

codecvt:没有这样的文件或目录。

user841550 asked 2020-08-11T21:57:27Z
4个解决方案
30 votes

GCC拒绝此代码的原因很简单:libstdc ++尚不支持<codecvt>

C ++ 11支持状态页面确认了这一点:

22.5标准代码转换构面N

answered 2020-08-11T21:57:41Z
22 votes

这个问题是在大约3年前提出的,令我感到惊讶的是,我在使用Ubuntu 14.04时也遇到了同样的问题,并进行了更新。

第二个惊喜,@ Fanael提供的链接现在显示:

22.5标准代码转换构面Y

所以我搜索了哪个版本的GCC可以完全实现C ++ 11。 事实证明,在GCC 5中添加了完整的支持:

[HTTPS://GCC.弓弩.org/GCC-5/changes.HTML]

全面支持C ++ 11,包括以下新功能:

...

Unicode转换的语言环境方面;

...

如果我有足够的声誉,我很乐意对答案发表评论:)

lderache answered 2020-08-11T21:58:41Z
20 votes

使用Boost.Locale的解决方法:

#include <boost/locale/encoding_utf.hpp>
#include <string>

using boost::locale::conv::utf_to_utf;

std::wstring utf8_to_wstring(const std::string& str)
{
    return utf_to_utf<wchar_t>(str.c_str(), str.c_str() + str.size());
}

std::string wstring_to_utf8(const std::wstring& str)
{
    return utf_to_utf<char>(str.c_str(), str.c_str() + str.size());
}  
jotrocken answered 2020-08-11T21:59:02Z
2 votes

它适用于带有gcc 5.3的Ubuntu 14.04。

Maks answered 2020-08-11T21:59:22Z
translate from https://stackoverflow.com:/questions/15615136/is-codecvt-not-a-std-header