boost 字符转换数据丢失, 抛出 illegal 异常

YihaiDeng 2016-06-05 10:45:09
我需要将一幅图片(二进制数据)转换成UTF-8数据用于网络发送,但是用 boost::locale::conv::between 转换的时候有一些特殊字符丢失,将 method_type 改为 stop 抛出illegal异常。
代码:

std::string utf8_msg(boost::locale::conv::between(msg, "UTF-8", "GBK",
boost::locale::conv::skip));
std::string gbkmsg(boost::locale::conv::between(utf8_msg, "GBK", "UTF-8",
boost::locale::conv::skip));
std::ostream oss(&_write_buff);
qDebug("msgsize:%d, utf8Size:%d, GBKSIZE:%d", msg.size(), utf8_msg.size(), gbkmsg.size());

环境:windows 10, VS2015, boost 1.60
...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
YihaiDeng 2016-06-06
  • 打赏
  • 举报
回复
引用 1 楼 dustpg 的回复:
二进制转换为UTF-8? 有没有搞错? 不是Base64?
是的,因为正在做一个即时聊天的工具,因为要和安卓端发送消息,所以想统一使用UTF-8编码格式来进行传输,实现在文字信息中间插入图片数据,安卓端不需要再转码。有没有比较好的解决方案,谢谢。
YihaiDeng 2016-06-06
  • 打赏
  • 举报
回复
引用 3 楼 dustpg 的回复:
看来lz并不了解什么叫做字符编码,建议用Base64对二进制编码
好的,谢谢。
YihaiDeng 2016-06-06
  • 打赏
  • 举报
回复
引用 3 楼 dustpg 的回复:
看来lz并不了解什么叫做字符编码,建议用Base64对二进制编码
的确不了解,谢谢建议。
赵4老师 2016-06-06
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
dustpg 2016-06-06
  • 打赏
  • 举报
回复
看来lz并不了解什么叫做字符编码,建议用Base64对二进制编码
dustpg 2016-06-05
  • 打赏
  • 举报
回复
二进制转换为UTF-8? 有没有搞错? 不是Base64?

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧