Tôi muốn chuyển đổi dữ liệu trong các mã hóa khác thành UTF-8. Tôi bị mắc kẹt với các sự cố sau:Cách sử dụng iconv để chuyển đổi utf8?
- Thực thi mã được đính kèm cung cấp cho tôi:
pointer being freed was not allocated
trong biểu tượngv(). Tại sao biểu tượng chơi với bộ nhớ của tôi? - Khi tôi không rảnh (dst) nó không sụp đổ nhưng không có gì được in. Thậm chí không gibberish. Có gì sai?
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;
}
Các ký tự FWIW, UTF-8 không bao giờ vượt quá 6 byte mỗi ký tự. 'len_src * 8' là quá mức cần thiết. –