Как правильно использовать MultiByteToWideChar
-
21-12-2019 - |
Вопрос
Я использую MultiByteToWideChar для преобразования моей строки в wstring.Сначала я пытаюсь получить необходимый размер для моей строки.Согласно документации, для этого необходимо передать 0 в качестве последнего аргумента.С использованием MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0);
возвращает 0 как требуемый размер буфера wstring.Я проверил, что str также является непустой строкой.Что я здесь делаю не так?
Решение
Для UTF-8 или кодовой страницы 54936 (GB18030, начиная с Windows Vista) для dwFlags должно быть установлено значение 0 или MB_ERR_INVALID_CHARS.В противном случае функция завершается с ошибкой ERROR_INVALID_FLAGS.
Вы используете CP_UTF8, но также передаете флаг MB_COMPOSITE, поэтому он не работает.