gpt4 book ai didi

c - 如何使用iconv 进行utf8 转换?

转载 作者:太空狗 更新时间:2023-10-29 17:25:18 25 4
gpt4 key购买 nike

我想将其他编码的数据转换为 UTF-8。我遇到了以下问题:

  1. 执行附加代码会得到:正在释放的指针未在 iconv() 中分配。为什么 iconv 会玩弄我的内存?
  2. 当我不 free(dst) 时,它不会崩溃,但不会打印任何内容。甚至不是胡言乱语。怎么了?

void utf8(char **dst, char **src, const char *enc)
{
iconv_t cd;
size_t len_src,
len_dst;

len_src = strlen(*src);
len_dst = len_src * 8; // is that enough for ASCII to UTF8?

cd = iconv_open("UTF-8", enc);

*dst = (char *)calloc(len_dst+1, 1);

iconv(cd, src, &len_src, dst, &len_dst);
iconv_close(cd);
}

int main(int argc, char **argv)
{
char *src = "hello world";
char *dst;

utf8(&dst, &src, "ASCII");
printf("%s\n", dst);

free(dst);
return 0;
}

最佳答案

引自 iconv() description at POSIX.1-2008

size_t iconv(iconv_t cd, char **restrict inbuf,
size_t *restrict inbytesleft, char **restrict outbuf,
size_t *restrict outbytesleft);

The variable pointed to by outbuf shall be updated to point to the byte following the last byte of converted output data.

您需要在 utf8() 函数中保存和恢复 *dst(可能还有 *src)。

关于c - 如何使用iconv 进行utf8 转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com