此代码使用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);
}
Run Code Online (Sandbox Code Playgroud)
错误:
codecvt:没有这样的文件或目录.
小智 30
GCC拒绝此代码的原因很简单:libstdc ++还不支持<codecvt>.
在C++ 11的支持状态页面证实了这一点:
22.5标准代码转换方面N.
小智 22
大约3年前问了这个问题,我很惊讶我使用Ubuntu 14.04也遇到了同样的问题.
第二个惊喜,@ Fanael提供的链接现在显示:
22.5标准代码转换方面Y.
所以我搜索了哪个版本的GCC将完全实现C++ 11.事实证明,在GCC 5中增加了全面支持:
https://gcc.gnu.org/gcc-5/changes.html
完全支持C++ 11,包括以下新功能:
...
用于Unicode转换的区域设置方面;
...
如果我有足够的声誉,我会很乐意对答案发表评论:)
jot*_*ken 20
使用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());
}
Run Code Online (Sandbox Code Playgroud)