Является ли codecvt заголовком std?
Этот код компилируется с Visual C++ 11 и работает, как ожидается, в Windows 7, но не компилируется с использованием MinGW 4.7.0 в Windows 7 или gcc 4.8.0 в Linux. Компилирование с -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: нет такого файла или каталога.
4 ответа
Причина, по которой GCC отклоняет этот код, проста: libstdC++ не поддерживает <codecvt>
еще.
Страница состояния поддержки C++11 подтверждает это:
22.5 Стандартные аспекты преобразования кода N
Вопрос был задан почти 3 года назад, и я был удивлен, что у меня также возникает такая же проблема при использовании Ubuntu 14.04 со свежими обновлениями.
Второй сюрприз, ссылка, предоставленная @Fanael, теперь показывает:
22.5 Стандартные аспекты преобразования кода Y
Поэтому я искал, какая версия GCC будет полностью реализовывать C++11. Оказывается, полная поддержка была добавлена в GCC 5:
https://gcc.gnu.org/gcc-5/changes.html
Полная поддержка C++11, включая следующие новые функции:
...
языковые аспекты для преобразования Unicode;
...
Я был бы рад оставить комментарий к ответу, если бы у меня было достаточно репутации:)
Обходной путь с использованием 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());
}