对于普通的工程来说,使用libiconv就可以转码,但是体积就不尽如人意。
借用Cnangel大佬的strnormalize,就可以便捷的实现转换
头文件:strnormalize.h 库文件:strnormalize.c GitHub:strnormalize
//GBK转UTF-8
str_normalize_init(); //必须引用
const char* utf8 = "我要变成utf-8字符!";
uint32_t utf8_len = strlen(utf8);
uint32_t utf8buffer_len = utf8_len * 3 + 1;//UTF-8中文使用24位(三个字节)
char* utf8buffer = (char*)malloc(utf8buffer_len);
memset(utf8buffer, 0, utf8buffer_len);
gbk_to_utf8(utf8, utf8_len, &utf8buffer, &utf8buffer_len);
printf("gbk: %s<=>%d \t utf8buffer: %s<=>%d\n", utf8, utf8_len, utf8buffer, utf8buffer_len);
free(utf8buffer);
全半角、简繁体转换、UTF-8转GBK没试验过,就不贴出代码了,具体可以看看原网页。