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

UTF-8、GBK等格式互相转换 【Windows/Linux 通用】

UTF-8、GBK等格式互相转换 [Windows/Linux 通用]

#ifdef WIN32
#include <windows.h>
#endif

#ifdef OS_UNIX
#include <iconv.h>
#endif

#if defined(WIN32)
void convert_encoding(const char *input, int from_codepage, int to_codepage, char *output)
{
	int wlen = MultiByteToWideChar(from_codepage, 0, input, -1, NULL, 0);
	if (0 == wlen)
		return;
	wchar_t *wbuf = (wchar_t *)malloc((wlen + 1) * sizeof(wchar_t));
	MultiByteToWideChar(from_codepage, 0, input, -1, wbuf, wlen);
	int len = WideCharToMultiByte(to_codepage, 0, wbuf, -1, NULL, 0, NULL, NULL);
	if (0 == len)
	{
		free(wbuf);
		return;
	}
	WideCharToMultiByte(to_codepage, 0, wbuf, -1, output, len, NULL, NULL);
	free(wbuf);
}
#else
void convert_encoding(const char *input, const char *from_encoding, const char *to_encoding, char *output)
{
	iconv_t cd = iconv_open(to_encoding, from_encoding);
	if (cd == (iconv_t)-1)
		return;
	size_t in_len = strlen(input);
	size_t out_len = in_len * 2; // 输出长度最多为输入长度的2倍
	char *in_ptr = input, *out_ptr = output;
	size_t ret = iconv(cd, &in_ptr, &in_len, &out_ptr, &out_len);
	if (ret == (size_t)-1)
	{
		iconv_close(cd);
		return; // 转换失败
	}
	*out_ptr = '\0'; // 添加字符串结尾
	iconv_close(cd);
}
#endif

// 用法例:

// 从共享内存取到UTF-8格式的字符串res,转换为GBK格式字符串tmpstr
#ifdef WIN32
		convert_encoding(res, CP_UTF8, CP_ACP, tmpstr);
#else
		convert_encoding(res, "UTF-8", "GBK", tmpstr);
#endif

相关文章:

  • 英语学习笔记25——Mrs. Smith‘s kitchen
  • 探索大模型技术:AI的未来与挑战
  • Jmeter例题分析-作业一
  • Docker部署Minio小记
  • C:技术面试总结
  • C# 实现腾讯云 IM 常用 REST API 之会话管理
  • 2024年华为OD机试真题-停车场车辆统计-C++-OD统一考试(C卷D卷)
  • 全栈式数据统计:SqlAlchemy怎样连接MsSql Server获取视图列表
  • 音视频开发5 补充 - Nginx搭建rtmp流媒体服务器,目的是让ffmpeg 可以直播推流
  • 编程实战:类C语法的编译型脚本解释器(三)插件(自定义函数)接口
  • 分享10个国内可以使用的GPT中文网站
  • Spring中的三级缓存和循环依赖
  • 玩转盲盒潮流:从0到1搭建小程序平台
  • “高考钉子户”唐尚珺决定再战2024年高考
  • 安装错误提示Please run MaterialLibrary2018.msi first或者其他MaterialLibrary版本
  • PostgreSQL用户与角色简述
  • 键盘盲打是练出来的
  • 状压dp 例题
  • 深入C++:深拷贝VS浅拷贝,编程高手必懂的技巧与陷阱
  • Spring Cloud 之 Gateway
  • 体坛联播|欧冠半决赛阿森纳主场不敌巴黎,北京男篮险胜山西
  • “乐购浦东”消费券明起发放,多个商家同期推出折扣促销活动
  • 中使馆:奉劝菲方有关人士不要在台湾问题上挑衅,玩火者必自焚
  • 上海科创的三种品格
  • 我国首部《人工智能气象应用服务办法》今天发布
  • 比熬夜更伤肝的事,你可能每天都在做