Я пытаюсь преобразовать строки в кодировке UTF-16 в UCS-4
Если я правильно понимаю, C ++ 11 обеспечивает это преобразование через codecvt_utf16.
Мой код выглядит примерно так:
#include <iostream>
#include <locale>
#include <memory>
#include <codecvt>
#include <string>
using namespace std;
int main()
{
u16string s;
s.push_back('h');
s.push_back('e');
s.push_back('l');
s.push_back('l');
s.push_back('o');
wstring_convert<codecvt_utf16<wchar_t>, wchar_t> conv;
wstring ws = conv.from_bytes(reinterpret_cast<const char*> (s.c_str()));
wcout << ws << endl;
return 0;
}
Примечание: явные push_backs позволяют обойти тот факт, что моя версия clang (Xcode 4.2) не имеет строковых литералов Unicode.
Когда код запускается, я получаю исключение завершения. Я делаю что-то незаконное здесь? Я думал, что это должно работать, потому что const char *, который я передал в wstring_convert, закодирован в UTF-16, верно? Я также считал, что проблема является порядком байтов, но я проверил, что это не так.