Cours PLURITAL 2008-2009

Jean-François Perrot & Marie-Anne Moreaux

Corrigé de l'examen écrit du jeudi 15 janvier 2009               Durée 3h, tous documents autorisés

Les quatre questions que voici sont sans rapport entre elles. Traitez-les dans l'ordre de votre choix

Le corrigé est en vert, l'énoncé apparaît dans sa typographie d'origine.
Lien vers l'énoncé seul (purgé des fautes de frappes).
  1. Que se passe-t-il ?


    En demandant à mon navigateur favori http://www.sainet.or.jp/%7Eeshibuya/hp.html
    j'obtiens une page Web où je lis notamment ceci :

    Page

    Je clique sur le premier lien Classic Text et j'obtiens....

    Texte

    Nous pouvons tout de suite tirer deux conclusions de ce spectacle :
    1. Le fichier HTML ne porte pas d'indication sur le codage des caractères qu'il emploie
      (sans quoi cette indication aurait été mise à profit par le navigateur )
    2. Ce codage n'est pas celui que le navigateur attend par défaut.

    Méfiant, je change de navigateur...


    TexteB

    Cette image ne nous apporte aucune information supplémentaire, si ce n'est que le codage attendu par mon navigateur Firefox
    n'est pas celui du navigateur précédent (Safari). Nos conclusions demeurent inchangées.

    Attention ! Il s'agit ici des exemplaires de Firefox et de Safari
    et non de Firefox et de Safari en général !
    N'allez pas déduire de ce qui précède que Firefox et Safari attendent toujours, par défaut, les mêmes codages
    (respectivement UTF-8 et Latin-1, comme on va le voir) !


    À l'aide !

    Seul remède applicable : essayer de trouver le codage du texte parmi ceux que propose le navigateur.
    Si on ne le trouve pas chez Safari, essayer aussi avec Firefox !
    Tout ce que nous en savons, c'est que ce codage est probablement un codage japonais.
    Voyons ce que propose Safari :


    Menu

    Cette image nous montre
    1. Que mon Safari attendait du Latin-1 (et non de l'UTF-8).
    2. Qu'il est capable de traiter quatre codages japonais différents !
      Essayons le premier....


    Ça marche !

    Ça marche ! Le texte était donc codé en Shift JIS (cf. cours n° 3)
    Enfin, ça ne marche pas tout à fait : les japonisants voient bien qu'il s'agit ici du texte du recueil de poésises de Murasaki Shikibu
    (紫式部集 Murasaki Shikibu Shû) et non pas, comme annoncé, celui de son journal (紫式部日記 Murasaki Shikibu Nikki).
    Mais ceci est une autre histoire...

    Pour compléter la démonstration, vérifions que le codage attendu par mon Firefox n'est pas Latin-1 :


    Firefox

    En effet, il attendait de l'UTF-8.
    Lui aussi sait traiter le Shift-JIS... et lui aussi, bien sûr, nous révèle le recueil de poèmes et non pas le journal !
  2. Un document Word

    reçu par courrier électronique refusant de s'afficher dans mon mailer (sous MacOS 10.5), je ne peux l'ouvrir qu'en "texte seul"
    et voici ce que j'obtiens :

    X & Y
     ont le plaisir de vous inviter au cocktail annuel de líEDITE de Paris
    le 15 dÈcembre 2008  de 17 heures ‡ 20 heures
    Caves du b‚timent Esclangon
    (niveau Jussieu, entrÈe piÈtons par la rue Jussieu ‡ líangle de la rue Jussieu et de la rue Cuvier)
    UniversitÈ Pierre et Marie Curie
    4, place Jussieu, Paris 5e



    Qu'en concluez-vous sur les jeux de caractères en usage à l'émission et à la réception du message ?
    Votre diagnostic doit expliquer toutes les anomalies observées !

    Les anomalies en question sont au nombre de quatre
    1. í au lieu de l'apostrophe
    2. È au lieu de é
    3. au lieu de à
    4. au lieu de â 
    On observe que ce catalogue contient exactement les lettres accentuées présentes dans le messsage,
    avec en plus l'apostrophe : il faut ici rappeler que la réalisation courante de l'apostrophe comme un simple "quote"
    (comme c'est le cas dans le présent texte, par exemple) est une licence incompatible avec une typographie soignée.
    L'apostrophe véritable ne figure pas dans le code ASCII !
    Quant à l'espèce de virgule, n° 4, ce n'est évidemment pas une vraie virgule (ASCII 2C), mais une sorte de guillemet simple "fermant en bas",
    appelée guillemet-virgule inférieur par Wikipédia.

    Ces anomalies sont vraisemblablement imputables à des octets supérieurs à 127, interprétés différemment à l'émission et à la réception.
    Comme il s'agit d'un texte produit par Microsoft Word et lu sur un Macintosh, on soupçonne qu'à l'émission on écrivait du Latin-1
    (ou du Windows 1252) et qu'à la réception on attendait du MacRoman.
    Pour démontrer cette hypothèse, il faut vérifier que dans les quatre cas l'octet correspondant au caractère anormal en MacRoman
    est bien celui du caractère normal en Latin-1 (ou en Windows 1252).

    1. í au lieu de l'apostrophe :  92 - comme cet octet n'est pas utilisé par Latin-1, c'est de Windows 1252 qu'il s'agit.
    2. È au lieu de é : E9
    3. au lieu de à : E0
    4. au lieu de â : E2 

    Quod erat demonstrandum.
  3. Un programme Perl

    d'allure innocente (TxtOut.pl) lit le fichier suivant  [Ex.txt]


    Luc             12
    Marie-Hélène    15
    Joël       
        13
    Françoise   
       09


    et produit comme résultat sur la sortie standard de ma machine (MacOS 10.5) : [Res.txt]

    Luc  12
    Marie-H?l?ne  15
    Jo?l  13
    Fran?oise  09



    Bon, ce programme a l'air de reproduire sa donnée en modifiant la mise en page (les notes ne sont plus alignées),
    et en changeant au passage le codage des caractères : les lettres accentuées ne sont plus reconnues.
    On va donc mener l'enquête dans cette direction.


    Déçu, j'interroge hexdump sur la donnée d'abord :

    00000000  4c 75 63 20 09 09 31 32  0a 4d 61 72 69 65 2d 48  |Luc ..12.Marie-H|
    00000010  c3 a9 6c c3 a8 6e 65 09  31 35 0a 4a 6f c3 ab 6c  |élène.15.Joël|
    00000020  09 09 31 33 0a 46 72 61  6e c3 a7 6f 69 73 65 09  |..13.Françoise.|
    00000030  30 39 0a                                          |09.|
    00000033



    C'est clair, le fichier est codé en UTF-8 (é = c3a9, è = c3a8ë = c3 abç = c3 a7).
    L'alignement des notes est réalisé par des tabulations (ASCII 09) : parfois deux, parfois une seule.
    Nos pouvons en conclure que le système d'exploitation sur lequel cette expérience a été réalisée
    (ou plutôt, l'utilitaire qui gère la sortie sur écran) accepte UTF-8 comme codage des caractères.
    Même hexdump consent à afficher les caractères accentués !

    sur le résultat ensuite :

    00000000  4c 75 63 20 20 31 32 0a  4d 61 72 69 65 2d 48 e9  |Luc  12.Marie-H?|
    00000010  6c e8 6e 65 20 20 31 35  0a 4a 6f eb 6c 20 20 31  |l?ne  15.Jo?l  1|
    00000020  33 0a 46 72 61 6e e7 6f  69 73 65 20 20 30 39 0a  |3.Fran?oise  09.|
    00000030



    C'est non moins clair : la sortie est codée en Latin-1 (é = e9, è = e8ë = ebç = e7),
    et les tabulations sont remplacées par deux espaces (ASCII 20).
    L'utilitaire d'affichage, qui se satisfaisait d'UTF-8, en revanche, n'accepte pas Latin-1 et il nous envoie
    des points d'interrogation, que ce soit en sortie directe ou via hexdump.


    C'est grave, docteur ?

    Le tout est de savoir quel est le but poursuivi.
    S'il s'agissait de traduire de l'UTF-8 en Latin-1 en remplaçant les tabs par des espaces, c'est gagné !
    Si on voulait rester en UTF-8, alors il faut veiller à ce que Perl "sorte" avec le bon codage,
    et ne pas se fier à son codage par défaut comme c'est probablement le cas dans le présent programme.
    Ça ne doit pas être bien difficile...
  4. Pouvez-vous m'expliquer pourquoi

    ce qui dans un fichier de courrier en format source se lit :

    From: =?ISO-2022-JP?B?GyRCPzkbKEIgGyRCTTNIfjtSGyhC?=<quelqun@quelquepart.org>
    Reply-To: =?ISO-2022-JP?B?GyRCPzkbKEIgGyRCTTNIfjtSGyhC?=<
    quelqun@quelquepart.org>

    s'affiche dans la fenêtre de lecture de mon mailer :

    De: 森由美子 <quelqun@quelquepart.org>
    Réponse à: 森由美子 <
    quelqun@quelquepart.org>


    Il faut distinguer deux ordres de causes, la générale et la particulière.

    1. La cause générale est naturellement l'obligation faite aux en-têtes de mail d'être écrites en ASCII pur (voir cours n° 3).
      Pour transmettre des noms écrits en caractères chinois (ici, un nom japonais) il faut donc les coder en ASCII.
      Le dispositif d'affichage du mailer-destinataire se charge de décoder et d'afficher le nom correctement,
      de même qu'il traduit "From" par "De" et " Reply-To" par "Réponse à".

    2. La cause particulière vise le procédé de codage employé. Ici, on observe que la chaîne ASCII
      =?ISO-2022-JP?B?GyRCPzkbKEIgGyRCTTNIfjtSGyhC?=
      est décodée en quatre caractères 森由美子.
      • La mention ?ISO-2022-JP? signale que ces caractères ont été au départ codés en ISO-2022-JP,
        qui est sans doute une variante du système général ISO-2022 aperçu au  cours n° 3 [vérification].
      • Que signifie B ? je subodore que c'est 'B' comme 'Base64'... (voir encore le cours n° 3)
        On trouve dans des contextes semblables 'Q' signifiant visiblement 'quoted-printable'.
      • En effet, la chaîne 'GyRCPzkbKEIgGyRCTTNIfjtSGyhC' ne contient que des lettres du codage en base64.

      Mais l'hypothèse que la chaîne 'GyRCPzkbKEIgGyRCTTNIfjtSGyhC' code '森由美子' en base 64 se heurte à des considérations arithmétiques.
      Cette chaîne a pour longueur 28, elle code donc un message de 28x6 = 168 bits, c'est-à-dire 21 octets.
      Or, si nos quatre caractères sont codés en ISO-2022-JP sur 2 octets chacun, le message ne compte que 8 octets, nous sommes donc loin du compte !
      Voyons ce qu'il en est en codant effectivement la chaîne '森由美子' en ISO-2022-JP grâce à un éditeur de textes adéquat,

      (lien vers ce fichier jp2022.txt : le faire apparaître correctement dans votre navigateur est en soi un bon exercice !)

      Wrangler

      et en interrogeant le résultat par hexdump :

      jfp% hexdump -C jp2022.txt
      00000000  1b 24 42 3f 39 4d 33 48  7e 3b 52 1b 28 42        |.$B?9M3H~;R.(B|
      0000000e
      jfp%


      14 octets ! et non pas 8... Pourquoi ? Décodons :

      1b 24 42 3f 39 4d 33 48  7e 3b 52 1b 28 42
      ESC $ B 
       森     由     美     子   ESC ( B

      Wikipedia nous apprend ceci:
      ISO-2022-JP. A widely used encoding for Japanese. Starts in ASCII and includes the following escape sequences
      • ESC ( B to switch to ASCII (1 byte per character)
      • ...........
      • ESC $ B to switch to JIS X 0208-1983 (2 bytes per character)

      Nous en déduisons que la séquence 'ESC $ B' opère le passage de l'ASCII à un codage sur 2 octets,
      et que la réciproque 'ESC ( B' opère le retour à l'ASCII.
      Nos 14 octets sont donc parfaitement expliqués par le mode opératoire du codage ISO-2022-JP.

      Bon, mais nous avions dit 21 octets ! Nous n'y sommes pas encore...
      Voici un outil qui décode une chaîne en base64 et affiche les octets sans chercher à les interpréter.


      octets

      21 octets ! Décodons :
      1b 24 42 3f 39 1b 28 42 20 1b 24 42 4d 33 48 7e 3b 52 1b 28 42
      ESC $ B    森   ESC (  B    ESC $  B   由    美     子   ESC ( B

      Il y a donc dans le message un retour à l'ASCII pour insérer un espace après le premier caractère !
      Lequel espace disparaît à l'affichage...

      C'est peut-être que, dans '森由美子', '森' est le nom de famille et '由美子' le nom personnel.
      Il est donc logique que ces deux parties soient distinguées dans le message.
      Mais l'usage, au Japon, est de ne pas marquer de séparation entre le nom de famille (qui vient en premier)
      et le nom personnel (qui vient en second) :
      en n'affichant pas l'espace, le mailer ne fait que s'y conformer !

      Felix qui potuit rerum cognoscere causas !
      Mais je dois dire que je n'ai pas encore trouvé d'autre exemple d'espace interstitiel dans ce genre de situation.