Кто знает как пофиксить? [закрыт]

131
09 января 2020, 07:20
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».

Закрыт 9 месяцев назад.

Обновил проект с VS2013 на vs2017 и получаю ошибку

неразрешенный внешний символ ""public: static class std::locale::id std::codecvt<char16_t,char,struct _Mbstatet>::id" (?id@?$codecvt@_SDU_Mbstatet@@@std@@2V0locale@2@A)"

Подскажите как пофиксить?

Код конвертора

#include "utfconvert.h"
string utf16_to_utf8(const u16string &s)
{
    wstring_convert<codecvt_utf8_utf16<char16_t>, char16_t> conv;
    return conv.to_bytes(s);
}
string utf32_to_utf8(const u32string &s)
{
    wstring_convert<codecvt_utf8<char32_t>, char32_t> conv;
    return conv.to_bytes(s);
}
std::u16string utf8_to_utf16(const string &s)
{
    //wstring_convert<codecvt_utf8_utf16<char16_t>, char16_t> conv;
    //return conv.from_bytes(s);
}
std::u16string utf32_to_utf16(const u32string &s)
{
    wstring_convert<codecvt_utf16<char32_t>, char32_t> conv;
    string bytes = conv.to_bytes(s);
    return u16string(reinterpret_cast<const char16_t*>(bytes.c_str()), bytes.length() / sizeof(char16_t));
}
std::u32string utf8_to_utf32(const string &s)
{
    wstring_convert<codecvt_utf8<char32_t>, char32_t> conv;
    return conv.from_bytes(s);
}
std::u32string utf16_to_utf32(const u16string &s)
{
    const char16_t *pData = s.c_str();
    wstring_convert<codecvt_utf16<char32_t>, char32_t> conv;
    return conv.from_bytes(reinterpret_cast<const char*>(pData), reinterpret_cast<const char*>(pData + s.length()));
}
Answer 1

Вообще-то VS2017 поддерживает codecvt, просто выдает предупреждение насчет "deprecated". Так что ошибка скорее всего получается из-за настроек проекта.

Решение комитета по стандартизации удалить из языка совершенно необходимое средство довольно спорное - это мягко говоря, а хотелось бы сказать грубо. Но приходится как-то с этим жить, так что лучше сразу ориентироваться на другие варианты.

Один вариант - это ICU Project. Решение исчерпывающее, но настолько монструозное и неудобное, что его и советовать не хочется.

По личному опыту могу порекомендовать UTF-CPP. Маленькая и быстрая библиотека шаблонов с достаточно адекватной документацией. Поддерживает UTF8/16/32.

Наверняка найдется что-то еще, но я остановился на UTF-CPP, пока устраивает полностью.

READ ALSO
Как работает boost::geometry::model::ring

Как работает boost::geometry::model::ring

Почему ring в виде восьмигранника оказывается не валиден:

145
получить нужную локаль для системы

получить нужную локаль для системы

Например у меня в линуксе стоит есть локаль ru_RUUTF-8

147
Как маппать данные в БД с помощью ORM?

Как маппать данные в БД с помощью ORM?

Подскажите, пожалуйста, как работать с данной технологией ? Чтобы таблицы, поля в них сами создавались и заполнялись с помощью ORM? Нужно ли подключать...

177
Java слияние двух объектов (Json, ObjectMapper)

Java слияние двух объектов (Json, ObjectMapper)

Есть два объекта класса MyBean (в классе всего полей 15 типа int и String):

183