全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  物联网学习笔记  >  详情

gb2312字符串和utf-8之间的转换

来源:千锋教育
发布人:wjy
2023-04-24

推荐

在线提问>>

  GB2312和UTF-8是两种不同的字符编码方式,其中GB2312是一种中文字符编码方式,而UTF-8是一种通用字符编码方式。在C语言中,可以使用一些库函数来进行GB2312字符串和UTF-8字符串之间的转换。

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);

 

相关推荐

在线咨询 免费试学 教程领取