Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

conversion d'une Regexp perl en ruby

1 réponse
Avatar
pere.noel
j'ai un script perl avec Regexp qui marche impec, cette regexp convertie
en ruby ne donne rien de bon...

enfin la regexp détexte si l'encodage de la string est en UTF-8 ou on,
c'est ok pour les deux versions à condition que ce soit une string du
fichier de script (pour ruby j'ai une version iso-8859-1 du même
fichier.

PAr contre dès que je cherche à vérifier l'encodage sur un contenu de
fichier, ça ne marche plis avec Ruby, avec Perl c'est OK...

alors, du coup, j'ai fait une "bidouille" j'appelle le script perl
depuis le script ruby )))

le script ruby :

--- butf.rb ------------------------------------------------------------
def isFileUtf8Encoded(fileName)
utf8rgx=Regexp.new('^(
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$', Regexp::EXTENDED, 'N')
str=""
File.open("#{fileName}").each { |l| str << l}
return (utf8rgx === str)
end

p isFileUtf8Encoded("lutte-ouvriere.html") # => true
p isFileUtf8Encoded("l_harmatan.html") # => true
p isFileUtf8Encoded("tut_exceptions.html") # => true
p isFileUtf8Encoded("butf.rb") # => true
p isFileUtf8Encoded("biso.rb") # => true

p `perl IsUTF-8.pl "lutte-ouvriere.html"` # => "0"
p `perl IsUTF-8.pl "l_harmatan.html"` # => "0"
p `perl IsUTF-8.pl "tut_exceptions.html"` # => "0"
p `perl IsUTF-8.pl "butf.rb"` # => "1"
p `perl IsUTF-8.pl "biso.rb"` # => "0"

p $KCODE # => "UTF8"
--- butf.rb ------------------------------------------------------------


le script perl, tout à fait similaire :

--- IsUTF-8.pl ---------------------------------------------------------
#!/usr/bin/perl

sub isFileUtf8Encoded
{
my ($fn) = @_;
$string='';
open (F, $fn) || die "Problème pour ouvrir le fichier $file :
$!";
while ($line = <F>) {
$string.=$line;
}
close F;
$flag = ($string =~
m/^(
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$/x);
if( $flag != 1 )
{
return 0;
}
return $flag;
}
print isFileUtf8Encoded(@ARGV[0])
--- IsUTF-8.pl ---------------------------------------------------------

--
une bévue

1 réponse

Avatar
pere.noel
Une bévue wrote:


alors, du coup, j'ai fait une "bidouille" j'appelle le script perl
depuis le script ruby )))


bon quelqu'un m'a donné un tuyau convainquant sur "comp.lang.ruby" :

en ruby la signification de ^ et de $ n'est pas la même qu'en perl, en
ruby il faut remplacer ^ par A et $ par z.

en effet, en perl ^ et $ match la fin d'une string, en ruby la fin
d'une ligne...
--
une bévue