gb2312字符串和utf-8之间的转换
来源:千锋教育
发布人:wjy
2023-04-24
推荐
在线提问>>
GB2312和UTF-8是两种不同的字符编码方式,其中GB2312是一种中文字符编码方式,而UTF-8是一种通用字符编码方式。在C语言中,可以使用一些库函数来进行GB2312字符串和UTF-8字符串之间的转换。
GB2312转UTF-8
可以使用iconv库函数将GB2312字符串转换为UTF-8字符串。iconv库函数包含在头文件iconv.h中,它的使用方式如下:
#include <iconv.h>
#include <stdlib.h>
#include <string.h>
char* gb2312_to_utf8(const char* gb2312_str)
{
iconv_t cd = iconv_open("UTF-8", "GB2312");
if (cd == (iconv_t)(-1)) {
perror("iconv_open");
exit(1);
}
size_t in_len = strlen(gb2312_str);
size_t out_len = in_len * 4 + 1; // 输出缓冲区长度是输入缓冲区长度的4倍加1
char* utf8_str = (char*)malloc(out_len);
char* in_ptr = (char*)gb2312_str;
char* out_ptr = utf8_str;
if (iconv(cd, &in_ptr, &in_len, &out_ptr, &out_len) == (size_t)(-1)) {
perror("iconv");
exit(1);
}
*out_ptr = '\0'; // 输出缓冲区末尾添加空字符
iconv_close(cd);
return utf8_str;
}
在这个例子中,我们定义了一个名为gb2312_to_utf8()的函数,该函数接受一个GB2312字符串作为输入,并返回一个UTF-8字符串。函数内部使用iconv_open()函数打开一个字符编码转换描述符,然后使用iconv()函数将输入缓冲区中的GB2312字符串转换为输出缓冲区中的UTF-8字符串,最后使用iconv_close()函数关闭字符编码转换描述符。
UTF-8转GB2312
同样可以使用iconv库函数将UTF-8字符串转换为GB2312字符串。下面是一个示例代码:
char* utf8_to_gb2312(const char* utf8_str)
{
iconv_t cd = iconv_open("GB2312", "UTF-8");
if (cd == (iconv_t)(-1)) {
perror("iconv_open");
exit(1);
}
size_t in_len = strlen(utf8_str);
size_t out_len = in_len * 2 + 1; // 输出缓冲区长度是输入缓冲区长度的2倍加1
char* gb2312_str = (char*)malloc(out_len);
char* in_ptr = (char*)utf8_str;
char* out_ptr = gb2312_str;
if (iconv(cd, &in_ptr, &in_len, &out_ptr, &out_len) == (size_t)(-1)) {
perror("iconv");
exit(1);
}
*out_ptr = '\0'; // 输出缓冲区末尾添加空字符
iconv_close(cd);