#include "utf8Conv.h"
#include <iostream>
#include <vector>
/* 将utf8字符转换为unicode(utf16)字符 */
void Utf8ToUnicode::UTF8toUTF16(const std::string &utf8Str, std::wstring &utf16Str)
{
utf16Str = L"";
std::vector<unsigned short> utf16line;
if (ToWchar(utf8Str, utf16line) == -1)
{
return ;
}
utf16Str.append(utf16line.size(), '!');
for (int i = 0, j = utf16line.size(); i < j; i++)
{
utf16Str[i] = utf16line[i];
}
}
/* 将unicode(utf16)字符转换为utf8字符 */
void Utf8ToUnicode::UTF16toUTF8(std::wstring &utf16Str, std::string &utf8Str)
{
std::vector<unsigned short> utf8line;
for (int i = 0, j = utf16Str.size(); i < j; i++)
{
utf8line.push_back(utf16Str[i]);
}
WcharToChar(utf8line, utf8Str);
}
int Utf8ToUnicode::ToWchar(std::string src, std::vector<unsigned short> &utf16line)
{
if (src == "")
{
return -1;
}
std::string::iterator end_it = utf8::find_invalid(src.begin(), src.end());
utf8::utf8to16(src.begin(), end_it, std::back_inserter(utf16line));
return 0;
}
int Utf8ToUnicode::WcharToChar(std::vector<unsigned short> &utf16line, std::string& dst)
{
dst.clear();
utf8::utf16to8(utf16line.begin(), utf16line.end(), back_inserter(dst));
return 0;
}