codecvt不是std头文件

Is codecvt not a std header?

本文关键字:文件 std 不是 codecvt      更新时间:2023-10-16

此代码在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: No such file or directory.

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

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

22.5标准代码转换面N

这个问题是三年前问的,我很惊讶我在使用Ubuntu 14.04的新更新时也遇到了同样的问题。

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

22.5标准代码转换面Y

所以我搜索了GCC的哪个版本可以完全实现c++ 11。原来在GCC 5中添加了完整的支持:

https://gcc.gnu.org/gcc-5/changes.html

完全支持c++ 11,包括以下新特性:

locale facet用于Unicode转换;

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

使用Boost的解决方案。地区:

#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());
}  

在Ubuntu 14.04和gcc 5.3上运行