使用std::wstring_convert 和 std::codecvt_utf8_utf16< char16_t>出现如下错误:
错误 LNK2001 无法解析的外部符号 “__declspec(dllimport) public: static class std::locale::id std::codecvt
< char16_t,char,struct Mbstatet>::id” (__imp?id@?$codecvt@_SDU_Mbstatet@@@std@@2V0locale@2@A) baseclasstest D:\C++\baseclasstest\baseclasstest\baseclasstest.obj
用下面方法解决:
#if _MSC_VER >= 1900
std::string utf16_to_utf8(std::u16string utf16_string)
{
std::wstring_convert<std::codecvt_utf8_utf16<int16_t>, int16_t> convert;
auto p = reinterpret_cast<const int16_t *>(utf16_string.data());
return convert.to_bytes(p, p + utf16_string.size());
}
std::u16string utf8_to_utf16(std::string utf8_string)
{
std::wstring_convert<std::codecvt_utf8_utf16<int16_t>, int16_t> convert;
auto p = reinterpret_cast<const char *>(utf8_string.data());
auto str = convert.from_bytes(p, p + utf8_string.size());
std::u16string u16_str(str.begin(),str.end());
return u16_str;
}
#else
std::string utf16_to_utf8(std::u16string utf16_string)
{
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
return convert.to_bytes(utf16_string);
}
std::u16string utf8_to_utf16(std::string utf8_string)
{
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
return convert.from_bytes(utf8_string);
}
#endif