Tag: iconv

iconv编码转换问题

我在将字符串从utf8转换为gb2312时遇到问题。 我的转换function如下 void convert(const char *from_charset,const char *to_charset, char *inptr, char *outptr) { size_t inleft = strlen(inptr); size_t outleft = inleft; iconv_t cd; /* conversion descriptor */ if ((cd = iconv_open(to_charset, from_charset)) == (iconv_t)(-1)) { fprintf(stderr, “Cannot open converter from %s to %s\n”, from_charset, to_charset); exit(8); } /* return code of iconv() */ int rc […]

使用iconv进行简单的UTF8-> UTF16字符串转换

我想写一个函数将UTF8字符串转换为UTF16(little-endian)。 问题是, iconv函数似乎不会让您事先知道存储输出字符串需要多少字节。 我的解决方案是首先分配2*strlen(utf8) ,然后在循环中运行iconv ,必要时使用realloc增加该缓冲区的大小: static int utf8_to_utf16le(char *utf8, char **utf16, int *utf16_len) { iconv_t cd; char *inbuf, *outbuf; size_t inbytesleft, outbytesleft, nchars, utf16_buf_len; cd = iconv_open(“UTF16LE”, “UTF8”); if (cd == (iconv_t)-1) { printf(“!%s: iconv_open failed: %d\n”, __func__, errno); return -1; } inbytesleft = strlen(utf8); if (inbytesleft == 0) { printf(“!%s: empty string\n”, __func__); […]

如何将UTF-16转换为UTF-32并在C中打印生成的wchar_t?

我正在尝试打印出一串UTF-16字符。 我暂时发布了这个问题,给出的建议是使用iconv转换为UTF-32并将其打印为一串wchar_t。 我做了一些研究,并成功编写了以下代码: // *c is the pointer to the characters (UTF-16) i’m trying to print // sz is the size in bytes of the input i’m trying to print iconv_t icv; char in_buf[sz]; char* in; size_t in_sz; char out_buf[sz * 2]; char* out; size_t out_sz; icv = iconv_open(“UTF-32”, “UTF-16”); memcpy(in_buf, c, sz); in = […]