Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Victor Wagner                        2:5020/400     28 Nov 2002  21:57:03
 To : Andrey Sapozhnikov
 Subject : Re: KOI2utf8
 -------------------------------------------------------------------------------- 
 
 Andrey Sapozhnikov <sapa@icb.chel.su> wrote:
 
 >> 
 >> Согласен. Это гораздо более практически полезная задача ПРЕДСТАВЛЕHИЯ
 >> строки, которая легко и естественно представляется в юникоде, средствами
 >> 8-битной кодировки + HTML. Буде будет такое решение, я, естественно,
 >> попробую адаптировать его к другим языкам, которые позволяют средставми 
 >> 8-битной кодировки выразить более другие символы - TeX, Perl, Tcl.
 >> Если сложность адаптации будет соответствовать прямизне представления
 >> этих символов в более другом языке, сделаю вывод, что в 5.8 перле 
 >> работа с кодировками сделана УДОБHО.
 
 AS> ======================== example ==========================
 AS> #!/usr/bin/perl -w
 AS> use strict;
 
 AS> BEGIN {
 AS>      use utf8;
 AS>      package Encode::myhtml;
 AS>      use base qw(Encode::Encoding);
 
 AS>      __PACKAGE__->Define('myhtml');
 
 AS>      my %subst = (
 AS>         '&' => '&', '<' => '<', '>' => '>', '"' => '"',
 AS>         "\x{00a0}" => ' ', "\x{2014}" => '—', "\x{00df}" => 'ss'
 AS>      );
 
 AS>      sub encode ($$;$) {
 AS>         (my $str = $_[1]) =~ s/([&<">\x{0080}-\x{ffff}])/$subst{$1} ||
 AS> $1/ge;        $_[1] = '' if $_[2];        Encode::encode('koi8-r', $str,
 AS> Encode::FB_HTMLCREF);     } };
 
 AS> use utf8;
 AS> use encoding 'utf8', STDOUT => 'myhtml';
 Что в этом решении мне не нравится - так это то, что 
 его нужно модифицировать для каждой новой кодировки.
 Я хотел универсального решения - чтобы можно было самому решать,
 что делать именно с символами отсутствующими в указанной целевой
 кодировке.
 
 Hа самом деле я хотел чего-то вот такого:
 
 my %subst=("\x{2014}"=>"—",
            "\x{00DF}"=>"ss",
            );
 sub encode_to_html ($$) {
     my ($encoding,$string) = @_;
     my $octets = "";
     while  ($string) {
         $octets .= Encode::encode( $encoding,$string,Encode::FB_QUIET);
         my $char = substr($string,0,1);
         $string = substr($string,1);
         if (exists $subst{$char}) {
           $octets.= $subst{$char} ;
         } else {
           $octets .= sprintf "&#%04X;",ord($char);
         }
     }
     return $octets;
 }
 
 У меня почему-то FB_QUIET ведет себя не как написано, а немедленно
 возвращает пустую строку не модифицируя входные данные, да еще и ругается
 при этом на STDERR.
 
 Можно, конечно, воспользоваться FB_PERLQQ,
 а потом глобальной заменой s/\\x\{(nnnn)\}/subst_function($1)/g.
 
  
 -- 
 http://www.communiware.ru                     http://www.ice.ru/~vitus
 --- ifmail v.2.15dev5
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 KOI2utf8   Timur Vafin   27 Nov 2002 23:17:13 
 Re: KOI2utf8   Victor Wagner   28 Nov 2002 01:26:13 
 KOI2utf8   Ruslan Bondarev   28 Nov 2002 10:01:49 
 Re: KOI2utf8   Victor Wagner   28 Nov 2002 11:43:55 
 Re: KOI2utf8   Andrey Sapozhnikov   28 Nov 2002 17:56:09 
 Re: KOI2utf8   Victor Wagner   28 Nov 2002 18:04:24 
 Re: KOI2utf8   Andrey Sapozhnikov   28 Nov 2002 18:45:24 
 Re: KOI2utf8   Victor Wagner   28 Nov 2002 19:58:32 
 Re: KOI2utf8   Andrey Sapozhnikov   28 Nov 2002 20:40:56 
 Re: KOI2utf8   Victor Wagner   28 Nov 2002 21:57:03 
 Re: KOI2utf8   Andrey Sapozhnikov   29 Nov 2002 18:37:18 
 Re: KOI2utf8   Victor Wagner   29 Nov 2002 18:58:53 
 Re: KOI2utf8   Andrey Sapozhnikov   29 Nov 2002 22:08:08 
 KOI2utf8   Ruslan Bondarev   28 Nov 2002 22:10:34 
 Re: KOI2utf8   Andrey Sapozhnikov   29 Nov 2002 18:03:29 
 KOI2utf8   Ruslan Bondarev   29 Nov 2002 21:53:47 
 Re: KOI2utf8   Timur Vafin   28 Nov 2002 19:39:30 
 Re: KOI2utf8   Victor Wagner   28 Nov 2002 19:51:54 
 KOI2utf8   Ruslan Bondarev   28 Nov 2002 09:58:06 
Архивное /ru.perl/151786e0cf302.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional