LINUX.ORG.RU

man iconv | читаем
iconv -l | смотрим и удивляемся сколько всего iconv знает
iconv -f UTF-8 -t WINDOWS-1251 <file.txt>

anonymous
()
Ответ на: комментарий от anonymous

может человеку нужно воспользоваться функцией из libc. тогда man 3 iconv. После его чтения, я окончательно понял, что реализацию iconv писали "странные" люди.

grustnoe ★★
()
Ответ на: комментарий от grustnoe

"Станные" - мягко сказано. Когда в первый раз ее использовал - прыгал вокруг 10 строчек кода с дебагером часа 3, мне и в голову не приходило, что ТАК можно намутить :)

PETER ★★
()
Ответ на: комментарий от PETER

Я уже двое суток прыгаю. Я не знаю, как использовать функцию iconv(). В документации только описание параметров функции. Покажите, пожалуйста, реально работающий пример использования этой функции.

anonymous
()

Я как пример взял исходники самого iconv, файл iconv.c, там есть функция convert(), которая собственно и преобразует кодировку файла поблочно.

AVI
()

/*
 * возвращает сконвертированую строку, а в size оная длина
 * ВНИМАНИЕ: сконвертированую строку я не терминировал NULL(ём),
 * т.к. для двух- (и более)- байтовых кодировок это не принесёт 
 * большой пользы.
 */
char * 
conv_charset(const char *from, const char *to, char *str, int *size)
{
    char *out;
    
    if (*size <= 0) {
        out = istrdup("");
    } else {
        char *buf, *holder;
        int insize, outsize, bufsize, r;
        iconv_t cd; 

        cd = iconv_open(to, from);
        if (cd == (iconv_t) - 1)
            return NULL;

        insize = *size;
        outsize = bufsize = insize * 4;

        buf = (char *) imalloc(bufsize);
        holder = buf;

        r = iconv(cd, &str, &insize, &buf, &outsize);
        if (r < 0 || insize != 0) {
            free(holder);
            iconv_close(cd);
            return NULL;
        }


        *size = bufsize - outsize;

        buf -= *size;
        out = (char *) imalloc(*size);
        memcpy(out, buf, *size);
        free(holder);
        iconv_close(cd);
    }

    return out;
}

/* imalloc и istrdup - врапперы вокруг соотвественых функций */

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.