использование libiconv в *nix
От: Палий Олег Украина  
Дата: 04.09.06 08:36
Оценка:
Пишу простой код:

#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.
что ему может не нравится?
строка с англ символами конвертится нормально.
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.