以下代码旨在提供将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);
}
该函数产生的字符串为空,不打印任何内容。
答案 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 );
}