Согласно ответу на этот вопрос std::wstring
может быть либо u16string
, либо u32string
.
Согласно первому ответу на этот вопрос можно просто преобразовать на u16string
и получить в результате std::wstring
.
Что мне интересно, так это то, как я узнаю, есть ли у меня 16-битное или 32-битное представление? Если я хочу преобразовать UTF8 в std::wstring
, похоже, я не могу использовать данное решение, потому что я не знаю, каково будет время выполнения.
Итак, как мне правильно преобразовать его? Или это не имеет значения, и преобразование всегда будет успешным в этом случае независимо от того, имею ли я 16-битное или 32-битное представление, ничего не теряя?
Может кто-нибудь уточнить?
РЕДАКТИРОВАТЬ:
Все это происходит из-за того, что здесь, на моем ноутбуке на базе Windows (Win8.1) с MSVC 2010, преобразование строки «abc» («abc») не выполняется со следующим кодом:
std::wstring_convert<std::codecvt_utf8<wchar_t> > myconv;
std::wstring table_name = myconv.from_bytes( (const char *) tableName );
Я еще не пробовал это на Linux/Mac, но, видя, что Windows дает сбой, говорит мне, что это нехороший знак, и я делаю что-то не так.
std::wstring
никогда не будет таким же, какu16string
илиu32string
: типы символовwchar_t
,char16_t
иchar32_t
— это разные типы. Однако кодировка дляstd::wstring
одинакова как дляstd::u16string
, так и дляstd::u32string
. - person Dietmar Kühl   schedule 28.05.2016wchar_t
составляет 16 бит в системе с 16-битнымwchar_t
, то есть в Windows. Количество битов в байте определяетсяCHAR_BIT
из<limits.h>
. Количество байтов наwchar_t
определяется какsizeof(wchar_t)
. - person Cheers and hth. - Alf   schedule 28.05.2016std::uXXstring
, а неstd::wstring
. - person coyotte508   schedule 28.05.2016wchar_t
. - person Cheers and hth. - Alf   schedule 28.05.2016std::wstring_convert<std::codecvt<Char>, char, std::mbstate_t>, Char>
кажется классом для преобразования в эту кодировку и из нее. Я не использовал это, хотя. - person Dietmar Kühl   schedule 28.05.2016std::wstring
, а не простоstd::u16string
, который также является кроссплатформенным? Используют ли другие части кодаstd::wstring
и также кодируют ли из utf8? - person coyotte508   schedule 28.05.2016