Sujet : Re: [MacCafé] UTF-8 + Latin 1 = caractères chinois
De : om+news (at) *nospam* miakinen.net (Olivier Miakinen)
Groupes : fr.comp.sys.mac.communicationDate : 18. Feb 2025, 17:12:55
Autres entêtes
Organisation : There's no cabale
Message-ID : <vp2bi7$10s1$1@cabale.usenet-fr.net>
References : 1 2
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 SeaMonkey/2.49.4
Le 18/02/2025 15:54, Gilbert OLIVIER a écrit :
Gilbert, à toi de jouer ! :-D
Je crois que je n'y peux pas grand-chose, et, quand bien même je
filtrerais pour qu'à la place d'un caractère chinois s'affiche "�",
De toute façon ce ne serait pas correct non plus si tu attendais que 4D
te donne un caractère chinois pour le remplacer par "�", parce que dans
ce cas 4D a déjà bouffé deux caractères valides en plus de cet octet
invalide.
Si tu regardes bien, c'est "ère" qui devient un unique "籥" au lieu de
"�re". Idem pour "êtr" et "éro".
ce
ne serait pas une bonne solution, car cela interdirait tout caractère
chinois sciemment transmis.
Raison de plus pour ne pas laisser trois octets dont un incorrect et deux
corrects devenir un unique caractère (valide, mais hors de propos).
D'abord essayons d'analyser ce qu'a pu essayer de comprendre 4D :
ère = (Latin1) E8 72 65 ; 籥 = (UTF-8) E7 B1 A5 = (UTF-16) 7C65
êtr = (Latin1) EA 74 72 ; 鳲 = (UTF-8) E9 B3 B2 = (UTF-16) 9CF2
éro = (Latin1) E9 72 6F ; 豯 = (UTF-8) E8 B1 AF = (UTF-16) 8C6F
... bof, ça n'est pas clair.
Le décodage en UTF-8 en "Content-Transfer-Encoding: 8bit" est fait par
une unique commande de 4D. Et c'est elle qui me retourne ce caractère.
Est-ce que tu as la possibilité d'appeler un programme externe au lieu de
la fonction interne de 4D ?
Par exemple :
iconv -f (le charset indiqué dans les entêtes) -t UTF-8//IGNORE
Voire :
iconv -f (le charset indiqué dans les entêtes) -t UTF-8//IGNORE 2>/dev/null
L'effet du //IGNORE sera d'envoyer un message d'erreur vers stderr (à ignorer)
tout en supprimant les caractères problématiques. C'est moins bien que de les
remplacer par un « � » mais mieux que de bouffer 3 octets dont deux valides
pour ajouter un truc aléatoire.
Voici en exemple ce que donne « iconv -f UTF-8 -t UTF-8//IGNORE » sur le texte
en Latin1 d'Otomatic.
Dans stdout :
Les gens que l'on considre comme des fous de travail sont, peut-tre,
tout simplement entrain de s'amuser. Einstein
Technologie aronautique -
http://aviatechno.netDans stderr :
iconv: séquence d'échappement non permise à la position 166
[...]
Je réponds juste à ta dernière hypothèse :
Je serai donc plus près de penser que sur les machines ou "�" est
affiché, la raison est que ce caractère n'existe pas dans la police
utilisée
Non, dans ce cas précis c'est qu'en UTF-8 un octet E8 doit être suivi de
deux octets entre 80 et 9F, donc pas d'un octet entre 00 et 7F. Mais cet
octet entre 00 et 7F (en l'occurrence le 72, puis le 65) ne doi(ven)t pas
être supprimés ni tranformés en autre chose qu'un « r » et un « e ». Rien
à voir donc avec les polices de caractères.
-- Olivier Miakinen