在Visual Studio中将字符串转换为wstring失败

时间:2019-01-15 13:26:56

标签: c++ visual-studio utf-8

以下代码旨在提供将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 :(得分:4)

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 );
}