C语言实现字符串转gbk
时间: 2023-09-14 14:14:15 浏览: 189
C语言中可以使用iconv库来实现字符串转换。iconv库提供了一个函数iconv(),可以将一个编码格式的字符串转换成另一个编码格式的字符串。
下面是一个示例程序,将UTF-8编码的字符串转换成GBK编码的字符串:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <iconv.h>
int main()
{
const char *utf8str = "你好,世界!";
size_t utf8len = strlen(utf8str);
size_t gbklen = utf8len * 2;
char *gbkstr = (char*)malloc(gbklen);
memset(gbkstr, 0, gbklen);
iconv_t cd = iconv_open("GBK", "UTF-8");
if (cd == (iconv_t)-1) {
printf("iconv_open failed: %s\n", strerror(errno));
return -1;
}
char *inbuf = (char*)utf8str;
char *outbuf = gbkstr;
if (iconv(cd, &inbuf, &utf8len, &outbuf, &gbklen) == (size_t)-1) {
printf("iconv failed: %s\n", strerror(errno));
return -1;
}
printf("GBK string: %s\n", gbkstr);
iconv_close(cd);
free(gbkstr);
return 0;
}
```
在该示例程序中,首先定义了一个UTF-8编码的字符串utf8str,然后计算出转换后的GBK字符串所需的长度gbklen,并动态分配了一个长度为gbklen的内存空间gbkstr。
接下来,使用iconv_open()函数打开一个转换句柄cd,将目标编码设置为GBK,源编码设置为UTF-8。如果iconv_open()函数返回-1,则表示打开转换句柄失败,程序将返回-1。
然后,将输入缓冲区指针inbuf指向utf8str,输出缓冲区指针outbuf指向gbkstr,调用iconv()函数将输入数据从UTF-8编码转换成GBK编码,并将转换后的数据存储到输出缓冲区gbkstr中。如果iconv()函数返回-1,则表示转换失败,程序将返回-1。
最后,使用iconv_close()函数关闭转换句柄,释放动态分配的内存空间,程序正常退出。
注意:在使用iconv库时,需要包含头文件#include <iconv.h>,并链接libiconv库。
阅读全文