当前位置: 首页 > news >正文

c++将utf8转gb2312

在涉及到中文显示时,经常用到utf到gb2312的相互转换,在c++中可以通过iconv函数转换,使用iconv类似于文件使用,顺序如下:

1、打开iconv_t conv = iconv_open("gb2312", "utf-8")

2、转换iconv(conv, utfBuf, utfBufLen, gb2312Buf, gb2312BufLen);

3、关闭iconv_close(conv);

在使用过程中有如下易错点需要规避,iconv函数会改变输入utfBuf和gb2312Buf的值,因此经过该函数后,这两个值的不可预测最好不要使用,如需要获取iconv转换后的字符,可将gb2312Buf指针值在函数执行前保存在另外一个变量中,转换后直接从该变量中获取转换后的字符,参考如下代码:

std::string utf8ToGb2312(std::string data)
{if(data.empty()){return "";}std::string gb2312Response = "";LOG_OUT(LOG_LEVEL_DEBUG, "utf8 response:%s", data.c_str());size_t utfBufLen = data.length();char* utf8Buf = (char*)malloc(utfBufLen + 1);memset(utf8Buf, 0x00, utfBufLen + 1);memcpy(utf8Buf, data.c_str(), data.length());size_t gb2312BufLen = utfBufLen * 2 ;char* gb2312Buf = (char*)malloc(gb2312BufLen);memset(gb2312Buf, 0x00, gb2312BufLen);char* utf8BufOri = utf8Buf;     //must use;char* gb2312BufOri = gb2312Buf; //must use;CodeConverter codeConverter;bool ret = codeConverter.utf8ToGB2312(&utf8Buf, &utfBufLen, &gb2312Buf, &gb2312BufLen);if(ret){gb2312Response = gb2312BufOri;LOG_OUT(LOG_LEVEL_DEBUG, "convert utf8-gb2312 success");}else{LOG_OUT(LOG_LEVEL_DEBUG, "convert utf8-gb2312 failure");}if(nullptr != gb2312BufOri){free(gb2312BufOri);gb2312BufOri = nullptr;}if(nullptr != utf8BufOri){free(utf8BufOri);utf8BufOri = nullptr;}return gb2312Response;
}

相关文章:

  • Tomcat组件概念和请求流程
  • 【Redis】初识 Redis
  • [JS]认识feach
  • 设计模式的七大原则
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • 【Linux】进程间通信——命名管道和共享内存
  • 2024年公共文化与社会服务国际会议(ICPCSS 2024)
  • 事务的学习
  • C#小结:未能找到类型或命名空间名“xxx”(是否缺少 using 指令或程序集引用?)
  • 容器docker 架构命令案例
  • 文心快码——百度研发编码助手
  • 大模型/NLP/算法面试题总结3——BERT和T5的区别?
  • WindowsMac共享文件夹设置
  • MSPM0G3507(三十六)——超声波PID控制小车固定距离
  • 景联文科技以高质量多模态数据集赋能AI大模型,精准匹配提升模型性能
  • [Vue CLI 3] 配置解析之 css.extract
  • [译]前端离线指南(上)
  • [译]如何构建服务器端web组件,为何要构建?
  • Bytom交易说明(账户管理模式)
  • extjs4学习之配置
  • JSONP原理
  • Linux gpio口使用方法
  • PAT A1120
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 闭包--闭包之tab栏切换(四)
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 用mpvue开发微信小程序
  • 运行时添加log4j2的appender
  • Java数据解析之JSON
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)Jupyter Notebook 下载及安装
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (算法)求1到1亿间的质数或素数
  • (一)VirtualBox安装增强功能
  • .net 7和core版 SignalR
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NetCore 如何动态路由
  • .Net多线程Threading相关详解
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET学习全景图
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [ C++ ] STL_list 使用及其模拟实现
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
  • [C#学习笔记]注释
  • [C++打怪升级]--学习总目录
  • [CSS]CSS 的背景
  • [C语言]一维数组二维数组的大小
  • [Java基础] Java中List.remove报错UnsupportedOperationException