URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2987
[ Назад ]

Исходное сообщение
"Перекодировщик utf-8 -> cp1251"

Отправлено Someone , 28-Май-04 20:25 
Подскажите, где можно найти перекодировщик utf-8 -> win-1251 и обратно или продскажите, где можно найти кодовые таблицы для такой перекодировки. (iconv не предлагать)

Содержание

Сообщения в этом обсуждении
"Перекодировщик utf-8 -> cp1251"
Отправлено Someone , 02-Июн-04 19:31 
люди, ну подкиньте пару линков-то

"Перекодировщик utf-8 -> cp1251"
Отправлено klalafuda , 02-Июн-04 20:27 
>люди, ну подкиньте пару линков-то

простите, если iconv не предлагать, то самому слабо набросать программку скажем на C на пару сотен строк (вместе с cp1251-unicode таблицей) ? или есть проблемы с посещением www.unicode.org и поиском таблицы перекодировки ?

// wbr


" то самому слабо набросать программку скажем на  >C на пару сотен стро"
Отправлено Lamr , 04-Июн-04 13:06 
> то самому слабо набросать программку скажем на
>C на пару сотен строк (вместе с cp1251-unicode таблицей) ?

Можно я скажу! Возмите мой!
Только таблицу надо добавить, utf нету
:-)))

/**
* @(#) Easy recoder  windows-1251 <-> koi8-r <-> cp866
*
* @author    Andrew Wingborn        mailto://programmer_coolsoft_ru
* @version    0.9
* @date    2004-02-22
*
* $FreeBSD$
*
* set tabstop=4
*/

#include <stdio.h>
#include <string.h>


int        chars[256];

int    win[] = {
    0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,
    0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,
    0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,
    0xdc,0xdd,0xde,0xdf,0xe0,0xe1,0xe2,
    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,
    0xea,0xeb,0xec,0xed,0xee,0xef,0xf0,
    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,
    0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,
    0xff,0xa8,0xb8
};

int    koi[] = {
    0xe1,0xe2,0xf7,0xe7,0xe4,0xe5,0xf6,
    0xfa,0xe9,0xea,0xeb,0xec,0xed,0xee,
    0xef,0xf0,0xf2,0xf3,0xf4,0xf5,0xe6,
    0xe8,0xe3,0xfe,0xfb,0xfd,0xff,0xf9,
    0xf8,0xfc,0xe0,0xf1,0xc1,0xc2,0xd7,
    0xc7,0xc4,0xc5,0xd6,0xda,0xc9,0xca,
    0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd2,
    0xd3,0xd4,0xd5,0xc6,0xc8,0xc3,0xde,
    0xdb,0xdd,0xdf,0xd9,0xd8,0xdc,0xc0,
    0xd1,0xb3,0xa3
};

int    dos[] = {
    0x80,0x81,0x82,0x83,0x84,0x85,0x86,
    0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,
    0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
    0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,
    0x9c,0x9d,0x9e,0x9f,0xa0,0xa1,0xa2,
    0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,
    0xaa,0xab,0xac,0xad,0xae,0xaf,0xe0,
    0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
    0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,
    0xef,0xf0,0xf1
};

struct args {
    char    *call_name;
    int        *src;
    int        *dst;
}
  code[] = {
    {  "win2koi",    win, koi },
    {  "win2dos",    win, dos },
    {  "koi2win",    koi, win },
    {  "koi2dos",    koi, dos },
    {  "dos2win",    dos, win },
    {  "dos2koi",    dos, koi },
};

#define    SIZE    sizeof(koi)/sizeof(i)

FILE    *input, *output;

void
err_quit(const char *msg)
{
    fprintf(stderr, "%s\n", msg);
    exit(1);
}

FILE*
Open(const char *name, const char *mode)
{
    FILE    *fp;

    if( (fp = fopen(name, mode)) == NULL)
                        err_quit("do not open file");
return(fp);
}

void
recode(int func)
{
    int        i;

    for(i=0; i < 256; i++)
                    chars[i] = i;

    for (i=0; i < SIZE; i++)
                    chars[ code[func].src[i] ] = code[func].dst[i];

    while( (i = fgetc(input)) != EOF)
                    fputc(chars[i], output);

exit(0);
}

int
main(int argc,char* argv[])
{
    int        i;

    if(argc > 3)
        err_quit("man win2koi");

    input  = stdin ;
    output = stdout;

    if(argc == 3)
        if(argv[1][0] != '-')
            input = Open(argv[1], "r");

    if(argc > 1)
        if(argv[ argc-1 ][0] != '-')
            output = Open(argv[ argc-1 ], "a");

    for(i=0; i < sizeof(code)/sizeof(struct args); i++)
        if( strstr(argv[0], code[i].call_name) != NULL)
                                                    recode(i);

    fprintf(stderr, "%s: ", argv[0]);

    err_quit("unknown function");
}
//
//#EOF


" то самому слабо набросать программку скажем на  >C на пару ..."
Отправлено Sokel , 13-Июл-04 17:46 
>Можно я скажу! Возмите мой!
>Только таблицу надо добавить, utf нету
>:-)))

а то, что UTF - плавающая кодировка не смущает?


"Перекодировщик utf-8 -> cp1251"
Отправлено dawnshade , 08-Июн-04 13:54 
>Подскажите, где можно найти перекодировщик utf-8 -> win-1251 и обратно или продскажите, где можно найти кодовые таблицы для такой перекодировки. (iconv не предлагать)


К примеру http://search.cpan.org/~gaas/Unicode-Map8-0.12/


"Перекодировщик utf-8 -> cp1251"
Отправлено Lamr , 08-Июн-04 15:51 
>К примеру http://search.cpan.org/~gaas/Unicode-Map8-0.12/

отстой!
мой круче
и порт стандартный собран - можно make install clean


">и порт стандартный собран - можно make install clean "
Отправлено Lamr , 08-Июн-04 16:02 
>и порт стандартный собран - можно make install clean

вот
http://beastie.fromru.com/ports/converters/win2koi-0.9.tar.gz


">и порт стандартный собран - можно make install clean "
Отправлено mirya , 14-Июл-04 15:16 
http://search.cpan.org/CPAN/authors/id/G/GU/GUIDO/libintl-pe...

табицы перекодировки для любой кодировки, кайф в том, что можно автоматически вырезать их все и конвертировать в любой формат