Re: replacement for iconv(1) that handles unconvertable chars correctly
On Tue, 2 Mar 2004, Pavel Kulkov wrote: Вот хороший вещь. Ну вот уж нет. Наглотался в свое время перекодировщиков с вшитыми таблицами да еще и кривыми. Таблицы должны быть: 1. внешними; 2. тщательно выверенными; 2.1 с unicode.org Все, что не соответствует - кривые поделки. Мне их не надо, я и сам такие делал. -- Если виртуальная память закончилась, она ненастоящая.
Re: replacement for iconv(1) that handles unconvertable chars correctly
разработчики debian рекомендуют konwert :))) Потому как при установке woody и выборе в tasksel Cyrillic и Russian ставится konwert :) P.S. Одна из его фич, которая мне нравится, напр символ номер в koi8r переделывает в No -- Best regards, Yury A. Yurevich Registered Linux User #276311 Debian 3.0r1 Woody kernel 2.6.2
Re: replacement for iconv(1) that handles unconvertable chars correctly
DAF == Dmitry A. Fedorov writes: В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 У меня успешно работает recode CP1251/..KOI8-R/ Но предупреждений о потере данных это не отменяет. DAF А мне хватило одного раза, когда текст успешно преобразовался DAF из КОИ-8 в 1251, а вот обратно на том же тексте выдавался DAF illegal... и продолжать отказывался. Ну и как это назвать? recode -f и гори он ... -- Zhenja KalutaICQ 74596027 GnuPG FingerPrint: B86C B548 7CC4 B58F 0CA3 856E 7EE8 52DE E6B7 8725
Re: replacement for iconv(1) that handles unconvertable chars correctly
On Tue, Mar 02, 2004 at 06:31:37PM +0200, Zhenja Kaluta wrote: DAF == Dmitry A. Fedorov writes: В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 У меня успешно работает recode CP1251/..KOI8-R/ Но предупреждений о потере данных это не отменяет. DAF А мне хватило одного раза, когда текст успешно преобразовался DAF из КОИ-8 в 1251, а вот обратно на том же тексте выдавался DAF illegal... и продолжать отказывался. Ну и как это назвать? recode -f и гори он ... -- Zhenja KalutaICQ 74596027 GnuPG FingerPrint: B86C B548 7CC4 B58F 0CA3 856E 7EE8 52DE E6B7 8725 ЪТХPт■ ▒ Ъzf╒√зy╦ ÷ЗН╡х ÷Зч╙Г╛╥Ыb╡шЪuФБjХ╝ ╤╛╧╦чrзЧИЛ╧╩╝чЪТК╒ФЕ{П╗·ж°╤X╛╤f╛╣ЙЪ√+-ЁВ^n╖Ч┼Ю Вот хороший вещь. #!/usr/bin/perl ## # Copyright (C) 1998 Stefan Mashkevich [EMAIL PROTECTED] # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License. # Disclaimer: The program is provided as is and there is no # warranty of any kind whatsoever. Your using it is at your own risk. ## # Transliterating from KOI8, DOS866, WIN1251, ISO8859-5, MAC # into any of these or into Latin characters # Manually: between two given encodings # Automatically: into a given encoding, figuring out the initial one # automatically by frequency analysis # # v0.1 S.Mashkevich 16 Nov 1998 # first working version # v0.5 S.Mashkevich 26 Nov 1998 # redesigned and shortened main code # completely rewrote frequency analysis algorithm # added MAC, ISO, Ukrainian and Belorussian characters # v0.8 S.Mashkevich 13 Dec 1998 # added reverse transliteration (handled by separate script; # this script was not changed) # # text on standard input, recoded on standard output # see usage message # ## # encodings: # KOI8 DOS866(=ALT) WIN1251 MAC ISO8859-5 Latin(=translit) @intos = qw/k a w m i l/; $ncods = @intos - 1; # last = Latin, treated separately ## # read in character codes while (DATA) { /^\d/ do { @data = split; for $j (0..$ncods-1) { $chars{$intos[$j]} = join '', $chars{$intos[$j]}, chr($data[$j]); $latin{chr($data[$0])} = $data[$ncods]; } } } ## # determine what to do @args = split //, $ARGV[0]; # into what $into = pop @args || usage(); # If Latin, will recode into 0 and raise flag to re-recode later on $into eq $intos[$ncods] do {$into = $intos[0]; $latflag = 1}; $chars_into = $chars{$into} || usage(); # from what (or automatic) defined ($from = pop @args) ? ($chars_from = $chars{$from} || usage()) : ($automatic = 1) ; # there shouldn't be anything else in the argument defined (pop @args) usage(); ## # actual recoding undef $/; $_ = STDIN; # analyze if necessary defined ($automatic) do { $result = analyze; do {print; exit} unless ($result); # probably non-Russian text $chars_from = $chars{$result}; }; # transliterate eval tr/$chars_from/$chars_into/, 1 || die $@; # if it was Latin defined ($latflag) do { foreach $char (keys %latin) { s/$char/$latin{$char}/g; }; }; # output print; ## sub analyze { # Frequency analyzer of Russian texts # attempting to determine which encoding they are in # Returns 0 if $_ appears to be non-Russian text # or one of k,a,w,m,i as it deems $_ is in # Things really depend on specific features of the encodings here, # therefore I don't care to avoid hardwired magic constants # first, count how many (perhaps) Russian characters are there my $intrst_chars = join '', map(chr, 128..255); my $length = eval tr /$intrst_chars/$intrst_chars/; # threshold for deciding when there are too few frequent characters in it my $thrhold = 0.08; # letters we will use: a,e,i,o,A,E,I,O my %aeio, %num_aeio, $enc_aieo, %AEIO, %num_AEIO, $enc_AIEO, $enc; my $num_aeio_max = 0, $num_AIEO_max = 0; $aeio{k} = join '', map(chr, qw/193 197 201 207/); $aeio{a} = join '', map(chr, qw/160 165 168 174/); $aeio{w} = join '', map(chr, qw/224 229 232 238/); $aeio{i} = join '', map(chr, qw/208 213 216 222/); $AEIO{k} = join '', map(chr, qw/225 229 233 239/); $AEIO{a} = join '', map(chr, qw/128 133 136 142/); $AEIO{w} = join '', map(chr, qw/192 197 200 206/); $AEIO{i} = join '', map(chr, qw/176 181 184 190/); # Count how many times there are a, e, i, o for $enc (qw/k a w i/) {
Re: replacement for iconv(1) that handles unconvertable chars correctly
Попробуй apt-get install re Sergey Belik
replacement for iconv(1) that handles unconvertable chars correctly
Hi, В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 Есть ли какие-либо утилиты которые могут такие ситуации обрабатывать - в смысле не отваливаться? Помню в altlinux iconv(1) (то есть часть glibc) специально патчится чтобы это можно было обрабатывать, но их патч почему-то в официальном glibc (2.2.5) отсутствует.. Даже подойдет кривая поделка (которых кажется море), заточенная только на русские кодировки - не одного имени такой поделки ни я, ни гугль вспомнить не можем.. -- Best regards, -Vlad
Re: replacement for iconv(1) that handles unconvertable chars correctly
Привет! Знакома эта проблема! В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 Не понимает некоторых букв русского алфавита (точно не помню каких, но что-то вроде [яюъь]) Есть ли какие-либо утилиты которые могут такие ситуации обрабатывать - в смысле не отваливаться? Есть. Давно и успешно пользуюсь konwert konwert cp1251-koi8r Имя_файла # Ещё ни разу не подводила
Re: replacement for iconv(1) that handles unconvertable chars correctly
On 2004.02.28 at 12:17:50 +0400, Vlad Harchev wrote: Hi, В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 Первое о чём бы я подумал - поменять технологию, и не использовать koi8-r. Ведь iconv не просто так ругается. Он предупреждает что информация будет теряться. В koi8-r есть далеко не все символы, которые пользователи кодировки 1251 используют в обычных текстовых файлах. Кавычек нет, длинного тире нет и так далее. Если заменить koi8-r на 1251 или utf-8 не удаётся - подумать о том, на что заменять эти символы. И уже в соответствии с этим искать решение. В принципе, утилита которая используя iconv(3) перекодирует всё, что перекодируется, а остальное заменяет по таблице, пишется на коленке за два часа. Аналогичная фунциональность у меня предусмотрена в catdoc, который, правда, не пользуется iconv даже на тех платформах, где iconv работоспособен. (сatdoc умеет перекодировать и текстовые файлы, не только вордовые) Кроме того, можно использовать в качетсве перекодировочной engine любой продвинутый скриптовый язык - Tcl (=8.1), Perl (=5.8) или Python (=2.0). Tcl по умолчанию заменяет неизвестные символы на вопросительный знак, что не всегда удобно. Точно так же, кстати, поступает Oracle, если кодировка клиента не совпадает с кодировкой сервера. Кстати, да, если тексты потом предполагается складывать в БД, то лучше всего поручить перекодировку самой БД. Они это умеют. Есть ли какие-либо утилиты которые могут такие ситуации обрабатывать - в смысле не отваливаться? Помню в altlinux iconv(1) (то есть часть glibc) специально патчится чтобы это можно было обрабатывать, но их патч почему-то в официальном glibc (2.2.5) отсутствует.. В 2.3 есть.
Re: replacement for iconv(1) that handles unconvertable chars correctly
On Sat, Feb 28, 2004 at 11:48:20AM +0300, Victor B. Wagner wrote: On 2004.02.28 at 12:17:50 +0400, Vlad Harchev wrote: Hi, В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 Первое о чём бы я подумал - поменять технологию, и не использовать koi8-r. Ведь iconv не просто так ругается. Он предупреждает что информация будет теряться. В koi8-r есть далеко не все символы, которые пользователи кодировки 1251 используют в обычных текстовых файлах. Кавычек нет, длинного тире нет и так далее. Если заменить koi8-r на 1251 или utf-8 не удаётся - подумать о том, на что заменять эти символы. И уже в соответствии с этим искать решение. Все это справедливо. Но у меня в реальности была необходимость переименовать дерево файлов с русскими именами в cp1251 в дерево файлов с именами koi8-r. Имена в koi8r практически всем устраивают, в революциях смысла для меня лично нет. В принципе, утилита которая используя iconv(3) перекодирует всё, что перекодируется, а остальное заменяет по таблице, пишется на коленке за два часа. Это да, но зачем эти 2 часа терять если есть готовые решения. Есть ли какие-либо утилиты которые могут такие ситуации обрабатывать - в смысле не отваливаться? Помню в altlinux iconv(1) (то есть часть glibc) специально патчится чтобы это можно было обрабатывать, но их патч почему-то в официальном glibc (2.2.5) отсутствует.. В 2.3 есть. Вроде их патч не до конца интегрировали - у них кажется была возможность замены неконвертируемых символов на указанный. -- Best regards, -Vlad
Re: replacement for iconv(1) that handles unconvertable chars correctly
On Sat, 28 Feb 2004 12:17:50 +0400 Vlad Harchev [EMAIL PROTECTED] wrote: Hi, В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 Есть ли какие-либо утилиты которые могут такие ситуации обрабатывать - в смысле не отваливаться? Помню в altlinux iconv(1) (то есть часть glibc) специально патчится чтобы это можно было обрабатывать, но их патч почему-то в официальном glibc (2.2.5) отсутствует.. Даже подойдет кривая поделка (которых кажется море), заточенная только на русские кодировки - не одного имени такой поделки ни я, ни гугль вспомнить не можем.. #apt-cache show re Package: re Priority: optional Section: text Installed-Size: 97 Maintainer: Aigars Mahinovs [EMAIL PROTECTED] Architecture: i386 Version: 0.1-5 Depends: libc6 (= 2.3.1-1), libgcc1 (= 1:3.2.1-1), libstdc++5 (= 1:3.2.1-1) Filename: pool/main/r/re/re_0.1-5_i386.deb Size: 2 MD5sum: 5c0a17838c50bd57c9488be1d4ab433e Description: Russian Anywhere -- Russian text converter Russian Anywhere is a Russian character decoding program. It allows to transfer Russian characters between different codepages. It's main purpose is to convert damaged Russian e-mail messages to readable form and it also may be used to convert files from/to known and unknown codepages. Task: russian -- Guten Tag, Alexey
Re: replacement for iconv(1) that handles unconvertable chars correctly
Vlad Harchev [EMAIL PROTECTED] writes: В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 У меня успешно работает recode CP1251/..KOI8-R/ Но предупреждений о потере данных это не отменяет. -- Sincerely yours, Mikhail A Gusarov Software Engineer IBM Solutions Group, Axmor Software ICQ# 111575219
Re: replacement for iconv(1) that handles unconvertable chars correctly
On Sat, 28 Feb 2004, Mikhail Gusarov wrote: В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 У меня успешно работает recode CP1251/..KOI8-R/ Но предупреждений о потере данных это не отменяет. А мне хватило одного раза, когда текст успешно преобразовался из КОИ-8 в 1251, а вот обратно на том же тексте выдавался illegal... и продолжать отказывался. Ну и как это назвать?
Re: replacement for iconv(1) that handles unconvertable chars correctly
On Sat, Feb 28, 2004 at 01:28:57PM +0400, Vlad Harchev wrote: On Sat, Feb 28, 2004 at 11:48:20AM +0300, Victor B. Wagner wrote: On 2004.02.28 at 12:17:50 +0400, Vlad Harchev wrote: Hi, В общем задача - есть текст в cp1251, надо его перегонять скриптами в koi8r. iconv(1) даже с ключем -c вываливается в середине со словами iconv: illegal input sequence at position 1385 Первое о чём бы я подумал - поменять технологию, и не использовать koi8-r. Ведь iconv не просто так ругается. Он предупреждает что информация будет теряться. В koi8-r есть далеко не все символы, которые пользователи кодировки 1251 используют в обычных текстовых файлах. Кавычек нет, длинного тире нет и так далее. Если заменить koi8-r на 1251 или utf-8 не удаётся - подумать о том, на что заменять эти символы. И уже в соответствии с этим искать решение. Все это справедливо. Но у меня в реальности была необходимость переименовать дерево файлов с русскими именами в cp1251 в дерево файлов с именами koi8-r. Имена в koi8r практически всем устраивают, в революциях смысла для меня лично нет. В принципе, утилита которая используя iconv(3) перекодирует всё, что перекодируется, а остальное заменяет по таблице, пишется на коленке за два часа. Это да, но зачем эти 2 часа терять если есть готовые решения. Когда мне такое понадобилось я писал на коленке. Затем чтоб оно еще и лапки меняло на , знак номера на # (или No) по желанию и длинное тире на минус. Есть ли какие-либо утилиты которые могут такие ситуации обрабатывать - в смысле не отваливаться? Помню в altlinux iconv(1) (то есть часть glibc) специально патчится чтобы это можно было обрабатывать, но их патч почему-то в официальном glibc (2.2.5) отсутствует.. В 2.3 есть. Вроде их патч не до конца интегрировали - у них кажется была возможность замены неконвертируемых символов на указанный. -- With Best Regards, Maxim Tyurin JID:[EMAIL PROTECTED] pgpr3ji8F6558.pgp Description: PGP signature