C语言 UTF-8与GBK编码互转,一个头文件搞定!不使用第三方库,纯C语言跨平台

背景:

项目需要在mips32架构的freertos系统上将输入的汉字、标点符号、数字、字母等转成机内码输出,第一个想到的办法是移植第三方库进行编码转换,网上搜了一圈libiconv、ICU库都可以实现,但是在我的项目上移植编译各种报错、非常痛苦。遂学习了一番,在计算机C语言编码中,汉字以UTF-8格式存储,想要转成机内码也就是GBK码输出还有一种方法就是对照码表进行转换。

源码

#include 
#include "gbk.h"

void hex_data_to_log_data(unsigned char *src, int len, char *dst)
{
	int i = 0;
	int index = 0;
	char buff[1024] = {0};
	
	for (i = 0; i < len; i++) {
	    index += sprintf(buff + index, "%02x", src[i]);
		index += sprintf(buff + index, " ");
	}
	if (strlen(buff) > 0) strcpy(dst, buff);
}

int get_gbk_len(char *str) {
	char *p = str;
	int len = 0;
	if (p == NULL) return 0;
	
	while (*p != 0x00) {
		len++;
		p = p + 1;
	}
	
	return len;
}

int main() {
	char utf[] = "你好";
	char utf_hex[2048] = {0};
	char gbk_hex[2048] = {0};
 	unsigned char gbk[2048] = {0};

	strcpy(gbk, u2g(utf));
	hex_data_to_log_data((unsigned char *)gbk, get_gbk_len(gbk), gbk_hex);
	hex_data_to_log_data((unsigned char *)utf, get_gbk_len(utf), utf_hex);
	printf("原文:%s\n", utf);
	printf("UTF 编码:%s\n", utf_hex);
	printf("GBK 编码:%s\n", gbk_hex);
}

代码解释:

代码非常简单,测试将汉字“你好”转成GBK编码并转成十六进制输出只需要包含一个头文件gbk.h,即可实现UTF-8编码与GBK编码互转。由于gbk.h附带码表整个文件非常大这里仅截图展示,源代码放在下方链接。整个实现.c和.h文件只用到一些C语言标准头文件可跨平台运行。(如果资源暂时未通过审核可评论留言我发给你)

编码转换头文件gbk.h获取

C语言 UTF-8与GBK编码互转,一个头文件搞定!不使用第三方库,纯C语言跨平台_第1张图片

在线编码转换工具网站验证

UTF-8编码
C语言 UTF-8与GBK编码互转,一个头文件搞定!不使用第三方库,纯C语言跨平台_第2张图片

PS:大部分在线汉字转UTF-8其实都是转成unicode编码,这边推荐一个网站

在线汉字转UTF-8

GBK编码
C语言 UTF-8与GBK编码互转,一个头文件搞定!不使用第三方库,纯C语言跨平台_第3张图片

输出结果展示

在这里插入图片描述

你可能感兴趣的:(c语言,UTF-8转GBK,编码转换)