Есть следующий код по замене emoji:
message = message.replace(":)", u8"\U0001F601");
В qt
отображается все хорошо. Показывается картинка с emoji. Далее сообщение отправляется на сервер для хранения и тут возникают проблемы. Работа с сервером идет через библиотеку boost
. Перед тем как попасть на сервер сообщение перекодируется:
std::wstring newmsg= message.toStdWString().c_str();
std::string msg = boost::to_utf8(newmsg);
Далее msg
загоняется в XML и отправляется на сервер. И XML выдает ошикбку парсинга.
Так же пробовался вариант:
auto a = message.toUtf8().replace(":)", u8"\U0001F601");
addMessage(QString::fromUtf8(a));
и
message = message.replace(":)", QString::fromUtf8(u8"\U0001F601"));
Что можно сделать?
P.S. Система Win 10. Сообщение проходит проверку на escape симфолы.
UPD: https://github.com/boostorg/spirit/issues/395
Я не уверен, что ошибка именно здесь, но обратите внимание:
boost::to_utf8(newmsg)
,
где newmsg
имеет тип std::wstring
А вот та самая ф-ия из Boost'a:
template <typename Char, typename Traits, typename Allocator>
inline utf8_string
to_utf8(std::basic_string<Char, Traits, Allocator> const& str)
{
// always store as UTF8
utf8_string result;
typedef std::back_insert_iterator<utf8_string> insert_iter;
insert_iter out_iter(result);
utf8_output_iterator<insert_iter> utf8_iter(out_iter);
typedef typename make_unsigned<Char>::type UChar;
BOOST_FOREACH(Char ch, str)
{
*utf8_iter++ = (UChar)ch;
}
return result;
}
Где utf8_string
- это std::string.
Так вот, меня смущает вот эта строка:
*utf8_iter++ = (UChar)ch;
За utf8_iter прячется char, а справа - wchar_t (причем какой-то производный тип, т.к. использовался make_unsigned
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я так понимаю, VAO - это просто обертка над конкретным VBO? Те