Programme pour vérifier la validité d’un fichier UTF-8 et le corriger si possible.

@besagni besagni authored on 8 Nov 2022
images Ajout de nouvelles images 1 year ago
Perl_sous_Windows.md Mise à jour de la doc Perl 1 year ago
README.md Version 1.4 du script valide_utf8.pl 1 year ago
valide_utf8.pl Version 1.4 du script valide_utf8.pl 1 year ago
README.md

valide-utf8

Programme pour vérifier la validité d’un fichier UTF-8 et le corriger si possible.

valide_utf8.pl

Programme qui vérifie que tous les caractères du texte sont bien codés en UTF-8 et sont considérés comme valides. Il signale également les caractères qui, bien que corrects en UTF-8, peuvent ne pas être acceptables suivant le contexte. Par exemple, les caractères de contrôle ne sont pas censés être présents dans un texte, une page HTML ou un fichier XML. De même, les caractères d’usage privé n’ont de sens que pour un programme donné.

Dans le contexte de l’import des thèses d’exercice de l’UL sur Hal, ce programme est utilisé pour vérifier s’il n’y a pas de caractères parasites dans les notices Conditor, une erreur due à certains copier-coller depuis des documents PDF, notamment au niveau des résumés.

Le code de retour après exécution du programme est :

  • 0 : fichier valide
  • 1 : option(s) erronée(s)
  • 2 : présence de caractères de contrôle ou d’usage privé
  • 3 : présence de caractères interdits ou mal formés

Usage

    valide_utf8.pl -f fichier [ -l log ]
    valide_utf8.pl -h

Options

    -f  indique le nom du fichier d’entrée
    -h  affiche cette aide
    -l  indique le nom du fichier “log”

Résultat

En cas de fichier valide, le programme n’affiche rien. Autrement, il affiche le nom du fichier suivi de la liste des caractères invalides ou potentiellement problématiques. Ces caractères sont regroupés soit dans la rubrique Erreurs, soit dans la rubrique Avertissements suivant leur type. En plus du caractère ou de la séquence d’octets en cause, le programme indique le type d’erreur, parfois suivi d’un commentaire entre parenthèses ou du nombre d’occurrences lorsque ce nombre est supérieur à 1.

Dans un répertoire contenant des fichiers XML à tester, la commande en shell est :

for i in *.xml
do
    valide_utf8.pl -f $i -l log.txt
done

On pourra obtenir un résultat du genre :

 ==> 2018LORR2078_232852677.xml <==
     Avertissements :
        Caractère d’usage privé '0xF0B7' (3 occurrences)

 ==> 2019LORR1039_236086766.xml <==
     Avertissements :
        Caractère d’usage privé '0xF0B1' (11 occurrences)

 ==> 2019LORR1054_236704621.xml <==
     Erreurs :
        Caractère interdit '0x0090' (2 occurrences)

 ==> 2019LORR1243_242220924.xml <==
     Erreurs :
        Caractère interdit '0xC0374' (plans réservés non attribués)
        Caractère interdit '0xC0372' (plans réservés non attribués) (3 occurrences)
        Caractère interdit '0xC0373' (plans réservés non attribués) (4 occurrences)
        Caractère interdit '0xC0377' (plans réservés non attribués) (2 occurrences)
        Caractère interdit '0xC0379' (plans réservés non attribués) (2 occurrences)
        Caractère interdit '0xC020B' (plans réservés non attribués) (2 occurrences)
        Caractère interdit '0xC037A' (plans réservés non attribués)
        Caractère interdit '0xC020C' (plans réservés non attribués)
        Caractère interdit '0xC037B' (plans réservés non attribués)

Le fichier log, lorsqu'il est demandé, contient la liste des fichiers testés et pour chaque occurrence d’un caractère ou d’une séquence d’octets invalides ou problématiques, le type d’erreur, la valeur du caractère ou de la séquence d’octets, le commentaire éventuel et la position en numéro de ligne, d’octet et de caractère. Par exemple :

==> 2018LORR2076_232738580.xml <==
==> 2018LORR2078_232852677.xml <==
 - Caractère d’usage privé '0xF0B7' [ligne 84, octet 1211, caractère 1175]
 - Caractère d’usage privé '0xF0B7' [ligne 84, octet 1251, caractère 1213]
 - Caractère d’usage privé '0xF0B7' [ligne 84, octet 1494, caractère 1449]

==> 2018LORR2079_232855838.xml <==
==> 2018LORR2080_232740100.xml <==
   ...
==> 2019LORR1054_236704621.xml <==
 - Caractère interdit '0x0090' [ligne 8, octet 40, caractère 40]
 - Caractère interdit '0x0090' [ligne 34, octet 46, caractère 46]

==> 2019LORR1055_236713302.xml <==
   ...
==> 2019LORR1243_242220924.xml <==
 - Caractère interdit '0xC0374' (plans réservés non attribués) [ligne 78, octet 707, caractère 677]
 - Caractère interdit '0xC0372' (plans réservés non attribués) [ligne 78, octet 711, caractère 678]
 - Caractère interdit '0xC0373' (plans réservés non attribués) [ligne 78, octet 715, caractère 679]
 - Caractère interdit '0xC0372' (plans réservés non attribués) [ligne 78, octet 719, caractère 680]
 - Caractère interdit '0xC0377' (plans réservés non attribués) [ligne 78, octet 995, caractère 945]
 - Caractère interdit '0xC0379' (plans réservés non attribués) [ligne 78, octet 1010, caractère 957]
 - Caractère interdit '0xC020B' (plans réservés non attribués) [ligne 78, octet 1015, caractère 959]
 - Caractère interdit '0xC037A' (plans réservés non attribués) [ligne 78, octet 1027, caractère 968]
 - Caractère interdit '0xC0372' (plans réservés non attribués) [ligne 78, octet 1031, caractère 969]
 - Caractère interdit '0xC020C' (plans réservés non attribués) [ligne 78, octet 1036, caractère 971]
 - Caractère interdit '0xC020B' (plans réservés non attribués) [ligne 78, octet 1603, caractère 1517]
 - Caractère interdit '0xC0373' (plans réservés non attribués) [ligne 78, octet 1612, caractère 1523]
 - Caractère interdit '0xC0377' (plans réservés non attribués) [ligne 78, octet 1617, caractère 1525]
 - Caractère interdit '0xC0379' (plans réservés non attribués) [ligne 78, octet 1621, caractère 1526]
 - Caractère interdit '0xC0373' (plans réservés non attribués) [ligne 78, octet 1627, caractère 1529]
 - Caractère interdit '0xC0373' (plans réservés non attribués) [ligne 78, octet 1632, caractère 1531]
 - Caractère interdit '0xC037B' (plans réservés non attribués) [ligne 78, octet 1636, caractère 1532]

==> 2019LORR1244_242514006.xml <==