[Moscow.pm] Передача данных скрипту
Павел Тимонин
gg.error на gmail.com
Чт Ноя 27 11:32:03 PST 2008
только вот производительность подобных решений оставляет желать сильно
лучшего. я даже использовал модуль типа Lingvo::RU::Detect, реализованный
подобным образом. после отключения скорость работы выросла в 4 раза, и я
думаю что подобные вещи не слишком приемлемы.
27 ноября 2008 г. 9:09 пользователь Oleg Alexeenkov <proler на gmail.com>написал:
> Здравствуйте, Vladimir.
>
> Вы писали 27 ноября 2008 г., 3:17:13:
>
> > 2008/11/27 Oleg Alexeenkov <proler на gmail.com>:
> >> Здравствуйте, Vladimir.
> >>
> >> Вы писали 27 ноября 2008 г., 2:11:00:
> >>
> >>> 2008/11/27 Ruslan Zakirov <ruz на bestpractical.com>:
> >>>> Может проще остаться с csv и предварительно его iconv'ертить в UTF-8
> >>
> >>> Лучше все-таки Encode'вертить :)
> >>
> >>
> >> Ктонить делал бенчмарки енкоде-иконвы-ручного(tr///)?
>
> > Во первых бенчмарк делать бессмысленно, т.к. ни tr ни iconv не дадут
> > строк с флагом
> > Во вторых tr - только для 1байтных кодировок, а ucs2 и utf8 относятся
> > к многобайтовым.
> Можно чуть усложнить и..
> > Хоте конечно можно рассмотреть iconv+utf8::upgrade vs decode
> Не всегда нужен флаг.
> А если очень захотеть...
>
> [да, я знаю что так делать нехорошо ;)]
>
>
>
> $config{'trans'}{'cp1251'} ||=
>
> "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xA8\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF\xB8\xB2\xB3\xAF\xBF\xAA\xBA";
> $config{'trans'}{'koi8-r'} ||=
>
> "\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xB3\xC1\xC2\xD7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\xC3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1\xA3\xB6\xA6\xB7\xA7\xB4\xA4";
> $config{'trans'}{'iso8859-5'} ||=
>
> "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xA1\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF1\xA6\xF6\xA7\xF7\xA4\xF4";
> $config{'trans'}{'cp866'} ||=
>
> "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xF0\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF1\xF6\xF7\xF8\xF9\xF4\xF5";
>
>
> sub cp_trans_count { #v1
> my ( $cfrom, $cto, $string ) = @_;
> return $string if $cto eq $cfrom or !length($string) or !$cfrom or !$cto;
> return utf_trans( $cto, $string ) if $cfrom eq 'utf-8' and
> $config{'trans'}{$cto};
> return to_utf_trans( $cfrom, $string ) if $cto eq 'utf-8' and
> $config{'trans'}{$cfrom};
> my $cnt;
> if ( $config{'trans'}{$cfrom} and $config{'trans'}{$cto} ) {
> ( $cfrom, $cto ) = \( $config{'trans'}{$cfrom}, $config{'trans'}{$cto}
> );
> eval "\$cnt = \$string =~ tr/$$cfrom/$$cto/";
> }
> return wantarray ? ( $string, $cnt ) : $string;
> }
>
>
> sub utf_trans {
> my ( $cto, $string ) = @_;
> return if $cto eq 'utf-8';
> my ( $cnt, $cnt2 );
> $cnt += $string =~ s/\xD0\x81/\xF0/g; # e
> $cnt += $string =~ s/\xD1\x91/\xF1/g; # E
> $cnt += $string =~ s/\xD0\x84/\xF4/g; # ukr beg
> $cnt += $string =~ s/\xD1\x94/\xF5/g;
> $cnt += $string =~ s/\xD0\x86/\xF6/g;
> $cnt += $string =~ s/\xD1\x96/\xF7/g;
> $cnt += $string =~ s/\xD0\x87/\xF8/g;
> $cnt += $string =~ s/\xD1\x97/\xF9/g; # ukr end
> $cnt += $string =~ s/\xE2\x80\x94/-/g; # -
> $cnt += $string =~ s/\xC2\xAB/"/g; # <
> $cnt += $string =~ s/\xC2\xBB/"/g; # >
> $cnt += $string =~ s/\xD1\x98/j/g; #
> $cnt += $string =~ s/\xD0\xB9/\xA9/g; # й
> $cnt += $string =~ s/\xD0([\x90-\xBF])/chr(ord($1)-16)/eg;
> $cnt += $string =~ s/\xD1([\x80-\x8F])/chr(ord($1)+96)/eg;
> ( $string, $cnt2 ) = cp_trans_count( 'cp866', $cto, $string );
> $cnt += $cnt2;
> $cnt += $string =~ s/\x21\x16/\xB9/g;
> return wantarray ? ( $string, $cnt ) : $string;
> }
>
> sub to_utf_trans {
> my ( $cfrom, $string ) = @_;
> return if $cfrom eq 'utf-8';
> my $cnt;
> # $cnt += $string =~ s/\xE9/\xD0\xB9/g; # й
> $cnt += $string =~ s/\xAB/"/g; # <
> $cnt += $string =~ s/\xBB/"/g; # <
> ( $string, $cnt ) = cp_trans_count( $cfrom, 'cp866', $string );
> $cnt += $string =~
> s/([\x80-\x88\x8A-\xA8\xAA-\xAF])/"\xD0".chr(ord($1)+16)/eg;
> $cnt += $string =~ s/([\xE0-\xE8\xEA-\xEF])/"\xD1".chr(ord($1)-96)/eg;
> $cnt += $string =~ s/\xF0/\xD0\x81/g; # e
> $cnt += $string =~ s/\xF1/\xD1\x91/g; # E
> $cnt += $string =~ s/\xF4/\xD0\x84/g; # ukr beg
> $cnt += $string =~ s/\xF5/\xD1\x94/g;
> $cnt += $string =~ s/\xF6/\xD0\x86/g;
> $cnt += $string =~ s/\xF7/\xD1\x96/g;
> $cnt += $string =~ s/\xF8/\xD0\x87/g;
> $cnt += $string =~ s/\xF9/\xD1\x97/g; # ukr end
> $cnt += $string =~ s/(?<!\xD0)\xB9/\x21\x16/g; # №
> $cnt += $string =~ s/(?<!\xD0)\xA9/\xD0\xB9/g; # й
> $cnt += $string =~ s/(?<!\xD0)\x89/\xD0\x99/g; # Й
> $cnt += $string =~ s/(?<!\xD0)\xE9/\xD1\x89/g; # щ
> $cnt += $string =~ s/(?<!\xD0)\x99/\xD0\xA9/g; # Щ
> return wantarray ? ( $string, $cnt ) : $string;
> }
>
>
>
>
> --
> С уважением,
> Oleg mailto:proler на gmail.com
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081127/0976dd41/attachment-0001.html>
Подробная информация о списке рассылки Moscow-pm