Не пей из копытца, козленочком станешь!
| Страница ДКД (Страница провайдера) | Линукс-Чайник (Оглавление) |
Date: Mon, 28 Jul 1997 17:11:12 +0400 From: "Nikita V. Youshchenko" yoush@cs.msu.su To: Evgeniy Kazanov pmu@mail.iae.lt Subject: Recoding from/to cp1251-koi8-altНужен конвертер? Всегда пожалуйста. Ниже - текст на Си. Этот конвертер я использую в скриптах и в командной строке. Usage: recoder from to, читает stdin, пишет stdout, следит за переводами строк знает кодировки dos, win, koi Вообще-то глуповато, но обычно работает. Где-то у меня валялся скрипт, перекодирующий поддерево директорий. Если интересно - могу поискать.
#include#include char * dos_coding = "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217" "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237" "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257" "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357"; char * win_coding = "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317" "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337" "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357" "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"; char * koi_coding = "\341\342\367\347\344\345\366\372\351\352\353\354\355\356\357\360" "\362\363\364\365\346\350\343\376\373\375\377\371\370\374\340\361" "\301\302\327\307\304\305\326\332\311\312\313\314\315\316\317\320" "\322\323\324\325\306\310\303\336\333\335\337\331\330\334\300\321"; char * get_table ( char * arg ) { if ( !strcmp ( arg, "dos" ) ) return dos_coding; if ( !strcmp ( arg, "win" ) ) return win_coding; if ( !strcmp ( arg, "koi" ) ) return koi_coding; return NULL; } int main ( int argc, char * argv[] ) { char *coding_from, *coding_to; int i,c; if ( argc != 3 || !(coding_from=get_table(argv[1])) || !(coding_to=get_table(argv[2])) ) { fprintf ( stderr, "Usage: recoder \n" " codings may be \"koi\", \"win\", \"dos\"\n" ); return 1; } while ( (c=getchar()) != EOF ) { if ( c == 13 ) continue; if ( c == 10 ) { if ( coding_to != koi_coding ) putchar(13); putchar(10); } else { for ( i=0; coding_from[i] && (unsigned char)coding_from[i] != (unsigned char)c; i++ ); putchar ( coding_from[i] ? coding_to[i] : c ); } } return 0; }
Интересно, что это можно вставить в shell commands в nedit (если не знаете - это такой текстовый редактор, на мой взгляд очень удобен для программирования) Тогда там можно будет, например, перекодировать выделенный текст при помощи пункта меню. Так я борюсь со некоторыми коллегами по работе, которые ну никак не способны прожить без MustDie95
Нужно что еще - всегда пожалуйста.
Никита.
P.S. Давно хотел сам завести Linux-страничку, да что-то все некогда. Да и не особо умею я это -(