Преобразование строки в wstring завершается неудачно в Visual Studio - PullRequest
0 голосов
/ 15 января 2019

Следующий код предназначен для предоставления функции преобразования строки в utf-8 в utf-16. Но это не удается. Как я могу исправить это для работы в Visual Studio 2017 C ++ 17:

#define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
#include <fstream>
using namespace std;

wstring utf8_to_uft16(string str)
{
    wstring_convert<std::codecvt_utf8_utf16<int16_t>, int16_t> convert;
    auto p = reinterpret_cast<const wchar_t *>(convert.from_bytes(str).data());
    return wstring(p);
}
int main()
{
    string u8 = u8"hello";
    wstring u16 = utf8_to_uft16(u8);
    wcout << u16;    
    cin.ignore(1);
}

созданная функцией строка пуста и ничего не печатается.

1 Ответ

0 голосов
/ 15 января 2019

wstring_convert::from_bytes возвращает std::basic_string. Эта строка будет уничтожена в конце строки, и указатель, возвращенный из data(), больше не будет действительным.

Есть ли причина, по которой вы не просто конвертируете напрямую в wchar_t?

wstring utf8_to_uft16( string str )
{
  wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> convert;
  return convert.from_bytes( str );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...