Синий Аллигатор, видно, что есть конвертация utf8 <-> unicode-16. Возможно, в первом случае строка хранилась в ином формате, чем рассчитывал разработчик.
Во всяком случае, str.ToUTF8() выглядит куда понятнее, чем str.mb_str(wxConvUTF8).
Кстати, что в доках написано?
Так почитабельнее будет:
static wxString FromUTF8(const char *utf8)
{
return wxString(wxConvUTF8.cMB2WC(utf8));
}
static wxString FromUTF8(const char *utf8, size_t len)
{
size_t wlen;
wxWCharBuffer buf(wxConvUTF8.cMB2WC(utf8, len == npos ? wxNO_LEN : len, &wlen));
return wxString(buf.data(), wxConvLibc, wlen);
}
const wxCharBuffer utf8_str() const
{
return wxConvUTF8.cWC2MB(wc_str(wxConvLibc));
}
const wxCharBuffer ToUTF8() const
{
return utf8_str();
}
const wxCharBuffer wxString::mb_str(const wxMBConv& conv) const
{
return conv.cWC2MB(c_str(), length() + 1 /* size, not length */, NULL);
}