Пишу простой код:
#include <stdio.h>
#include <iconv.h>
#include <errno.h>
int main() {
char outbuf[512];
char *inbuf=strdup("SDFуваASDF");
size_t inbytesleft, outbytesleft;
char *inptr = inbuf;
char *outptr = outbuf;
inbytesleft = strlen(inbuf);
outbytesleft = sizeof(outbuf) - 1;
iconv_t iconv_desc = iconv_open ("KOI8-U", "UTF-8");
printf("inbuf='%s' inbytesleft=%i outbytesleft=%i\n", inbuf, inbytesleft, outbytesleft);
if (iconv(iconv_desc, (const char **) &inptr, &inbytesleft, &outptr, &outbytesleft) == (size_t)(-1)) {
printf("errno= %i\n", errno);
};
*outptr = 0;
printf("converted='%s' inbytesleft=%i outbytesleft=%i\n", outbuf, inbytesleft, outbytesleft);
free(inbuf);
iconv_close(iconv_desc);
return errno;
}
Выдает:
inbuf='SDFываASDF' inbytesleft=10 outbytesleft=511
errno= 86
converted='SDF' inbytesleft=7 outbytesleft=508
86 — это EILSEQ An invalid multibyte sequence has been encountered in the input.
что ему может не нравится?
строка с англ символами конвертится нормально.
Спасибо!