[Linux-31] «Identité» n'est pas «Identité» pour bash

jeanmichel.123 at free.fr jeanmichel.123 at free.fr
Mer 10 Oct 23:33:57 CEST 2012


Ceci étant, un tel opérateur peut-être codé en Perl comme suit, éventuellement:
    J'ai bon ?

cat compareText.pl 

#!/usr/bin/perl -w

use strict;
use utf8;

# Interfaçage de Perl avec Unicode™
use I18N::Langinfo qw(langinfo CODESET);
my $codeset = langinfo(CODESET);
use Encode qw(decode);
@ARGV = map { decode $codeset, $_ } @ARGV;

use Unicode::Normalize;

# A des fins de debug
# print "$codeset \n";
# print join(",", @ARGV);
# print "\n";


# Vérification des arguments (cas d'erreurs)

my $num_args = $#ARGV + 1;
if ($num_args != 3) {
  print "\nUsage: compareTexte.pl chaine1 ≈ chaine2 \n";
  exit;
}
if ($ARGV[1] ne "≈" )  {
  print "\nUsage: compareTexte.pl chaine1 ≈ chaine2 \n";
  exit;
}


# Normalisation pour tester l'équivalence
my $paramètre1 = NFC($ARGV[0]);
my $paramètre2 = NFC($ARGV[2]);

# print join(",", @ARGV);
# print "\n";
# print "Lancement de la comparaison de " . $ARGV[0] . " et $ARGV[2]\n";
# print ( "Lancement de la comparaison de $paramètre1 et $paramètre2\n");
# print ( "Lancement de la comparaison de " . length($paramètre1). " et " . length($paramètre2) . "\n");

# Test de l'équivalence
exit (!( $paramètre1 eq $paramètre2));

return 1;




Ce qui peut s'utiliser comme suit:

a="Identité" b="Identité"; ./compareText.pl  $a ≈ $b && echo "«$a» est équivalent à «$b» pour ./compareText.pl" 
«Identité» est équivalent à «Identité» pour ./compareText.pl


----- Mail original -----
De: "jeanmichel 123" <jeanmichel.123 at free.fr>
À: linux-31 at culte.org
Envoyé: Mercredi 10 Octobre 2012 22:41:44
Objet: Re: [Linux-31] «Identité» n'est pas «Identité» pour bash

Je suis d'accord sur l'analyse: les deux chaînes sont identiques, au sens commun, mais différentes dans leur expression binaire.

Effectivement, si l'on cherche à comparer deux chaînes d'octets, l'approche du bash - à moins que ce ne soit celle de /usr/bin/[ -est celle à laquelle on peut donner raison.

Toutefois, si le but est de comparer deux chaînes de textes, dans un environnement hétérogène comme peut l'être l'internet, on pourrait avoir un deuxième opérateur de comparaison, pour comparer deux textes plutôt que deux chaînes binaires. Il est d'ailleurs vraisemblable que certains moteurs de recherche, du moins dans leur principe de fonctionnement, aillent au-delà.




----- Mail original -----
De: "Chaput Emmanuel" 


    Jolie question !

    En fait, le premier mot ($a) a été codé en UTF-8 avec
un 65 puis cc81 (donc un e suivi d'un accent aigu), alors
que le second ($b) l'a été avec un c3a9 (donc un e accent
aigu). Un petit "od" permet de s'en convaincre, ...

    Au final, le texte affiché est le même, mais pas le code
stocké ...

    C'est donc bash qui a raison (encore que /usr/bin/[  n'est
pas une built-in de bash à mon avis).

    J'ai bon ?

Le 09/10/2012 23:42, jeanmichel.123 at free.fr a écrit :
> A défaut de se demander ce qu'est l'identité ..., on peut se demander s'il y a identité entre Identité et Identité.
>
> Le bash a son idée sur la question!
>
> a="Identité" b="Identité"; [[ $a = $b ]] || echo "«$a» n'est pas «$b» pour $0"
> «Identité» n'est pas «Identité» pour bash
> _______________________________________________
> Linux-31 mailing list
> Linux-31 at culte.org
> http://culte.org/mailman/listinfo/linux-31
>    


-- 
Emmanuel Chaput, Maître de Conférences - Dépt Télécom&  Réseau, ENSEEIHT
Equipe Ingénierie Réseaux et Télécommunications                IRIT-CNRS
*5 34 32 22 31 - Fax *5 34 32 21 57                Emmanuel.Chaput at n7.fr

_______________________________________________
Linux-31 mailing list
Linux-31 at culte.org
http://culte.org/mailman/listinfo/linux-31
_______________________________________________
Linux-31 mailing list
Linux-31 at culte.org
http://culte.org/mailman/listinfo/linux-31



Plus d'informations sur la liste de diffusion Linux-31