vs2015 和 vs2017 codecvt bug 解决方法

使用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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值