Я хотел бы преобразовать строку в строку UTF-16.
Я написал следующий код:
std::string str = "aé"; // a test string with a French character
using cvt_type = std::codecvt_utf8_utf16<wchar_t>;
std::wstring_convert<cvt_type> converter;
std::wstring wstr = converter.from_bytes(str); // exception: std::range_error
Приведенный выше пример отлично работает со строками, содержащими юникод (например, std::string str="\u0061\u00e9"
) или строки без специальных символов.
Но мой первый пример не работает.
Я получаю следующее исключение: Microsoft C++ exception: std::range_error at memory location 0x00A9E7E4
Программа останавливается там: converter.from_bytes(str);
Когда я добавляю строку str[1]=130; // é
все работает нормально, поэтому я думаю, что причиной проблемы являются подписанные символы.
Мне нужно использовать строку подписанных символов, потому что я хочу отправить данные через TCP-сокеты.
Как выполнить преобразование, чтобы я мог отправлять свои данные с помощью сокетов?
Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …