Discussion:
Flux de données étranges
(trop ancien pour répondre)
Vincent Ramos
2004-09-13 15:17:08 UTC
Permalink
Bonjour,

Je n'ai pas trouvé de forum vraiment adapté à ma question. C'est
cependant sur celui-ci que je pense pouvoir trouver les conseils les
plus éclairés.

Voici : en échangeant du texte brut entre deux PC (un sous Win98
l'autre sous GNU/Linux) via une passerelle samba qui intercepte les
WinPopup de Win98, j'obtiens, dans le sens Win --> Linux des choses
étranges (pour information, les données de WinPopup sont transformées
en texte brut que je n'ai plus qu'à traiter).

Les caractères non ASCII sont en effet convertis dans un format que
je ne comprends pas. Par exemple, pour les lettres diacritées
fondamentales, j'obtiens (en hexadécimal) :

* é = 0xC3 0x9A ;
* è = 0xC3 0x9E ;
* à = 0xC3 0x93, etc.

Ce n'est pas de l'UTF-8 mais je trouve étrange que ça en soit très
proche : 0xC3 0x9A au lieu de 0xC3 0xA9, par exemple, cela me frappe.
Ne serait-ce pas dû à une question de gros ou petit boutisme ? Si
oui, comment, avec recode par exemple, corriger le tir pour obtenir
de l'UTF-8 bien formé ?

Les autres caractères, cependant, ne suivent pas ce principe.

Merci de vos conseils.
Sylvain Collange
2004-09-13 16:05:21 UTC
Permalink
Bonjour,
Post by Vincent Ramos
Les caractères non ASCII sont en effet convertis dans un
format que je ne comprends pas. Par exemple, pour les lettres
* é = 0xC3 0x9A ;
* è = 0xC3 0x9E ;
* à = 0xC3 0x93, etc.
Apparement c'est du texte ISO-8859-1 ou Windows-1252 qui a été subi une
conversion de OEM 850 vers UTF-8.

0xE9, qui représente un Ú en OEM, est donc converti en 0xC3 0x9A.
Post by Vincent Ramos
comment, avec recode par exemple, corriger le tir pour obtenir
de l'UTF-8 bien formé ?
Reconvertir d'abord de UTF-8 vers OEM 850, puis de Windows-1252 vers le
codage voulu. Sachant que cela risque de n'être valable que sur un
Windows occidental...
--
Sylvain Collange
Vincent Ramos
2004-09-13 16:24:54 UTC
Permalink
Post by Sylvain Collange
Apparement c'est du texte ISO-8859-1 ou Windows-1252 qui a été subi
une conversion de OEM 850 vers UTF-8.
Merci. Quelle efficacité !
Olivier Miakinen
2004-09-13 16:09:04 UTC
Permalink
Post by Vincent Ramos
Les caractères non ASCII sont en effet convertis dans un format que
je ne comprends pas. Par exemple, pour les lettres diacritées
* é = 0xC3 0x9A ;
* è = 0xC3 0x9E ;
* à = 0xC3 0x93, etc.
Ce n'est pas de l'UTF-8 mais je trouve étrange que ça en soit très
proche : 0xC3 0x9A au lieu de 0xC3 0xA9, par exemple, cela me frappe.
C'est de l'UTF-8, mais sur des caractères mal compris. Apparemment, la
machine Windows considère que les caractères à transmettre sont en cp850
(encodage MS-DOS) et pas en win-1252 (encodage Windows) ni en iso-8859-1
(iso-latin-1).

En effet, prenons les exemples que tu donnes. Les caractères /é/, /è/ et
/à/ ont respectivement les numéros 233, 232 et 224 dans win-1252 et
iso-latin-1. Or, aux positions 233, 232 et 224 on trouve respectivement
/Ú/, /Þ/ et /Ó/ dans cp850, dont les codes Unicode sont 218, 222 et 211,
encodés C3+9A, C3+9E et C3+93.
Post by Vincent Ramos
Ne serait-ce pas dû à une question de gros ou petit boutisme ? Si
oui, comment, avec recode par exemple, corriger le tir pour obtenir
de l'UTF-8 bien formé ?
Non, pas de gros ou petit boutisme ici, juste un samba qui croit que tu
lui passes un texte MS-DOS alors qu'en fait c'est un texte Windows.
Post by Vincent Ramos
Les autres caractères, cependant, ne suivent pas ce principe.
Normal : cp850 de MS-DOS, tout comme win-1252 et iso-latin-1, est
identique à ASCII pour ses 128 premières valeurs.
Vincent Ramos
2004-09-13 16:27:31 UTC
Permalink
Post by Olivier Miakinen
Non, pas de gros ou petit boutisme ici, juste un samba qui croit que
tu lui passes un texte MS-DOS alors qu'en fait c'est un texte
Windows.
D'accord. En fait, ma configuration de samba -- ce qui est le cas par
défaut dans la dernière version -- part du principe que Win tourne en
cp850 et Linux en UTF-8, alors que le Win98 relié par samba est en
1252.

C'est pourtant le seul problème de codage que je rencontre (aucun
soucis avec les noms de fichiers ou de répertoires par exemple).

Merci pour les explications.
Jean-Marc Desperrier
2004-09-13 16:31:53 UTC
Permalink
Post by Vincent Ramos
Post by Olivier Miakinen
Non, pas de gros ou petit boutisme ici, juste un samba qui croit que
tu lui passes un texte MS-DOS alors qu'en fait c'est un texte
Windows.
D'accord. En fait, ma configuration de samba -- ce qui est le cas par
défaut dans la dernière version -- part du principe que Win tourne en
cp850 et Linux en UTF-8, alors que le Win98 relié par samba est en
1252.
C'est pourtant le seul problème de codage que je rencontre (aucun
soucis avec les noms de fichiers ou de répertoires par exemple).
Peut-être parceque les noms de fichiers sont eux réellement envoyés en
cp850 ? C'est configurable quasiment au coup par coup avec les api de
windows ...
Vincent Ramos
2004-09-13 17:24:31 UTC
Permalink
Post by Jean-Marc Desperrier
Post by Vincent Ramos
C'est pourtant le seul problème de codage que je rencontre
(aucun soucis avec les noms de fichiers ou de répertoires par
exemple).
Peut-être parceque les noms de fichiers sont eux réellement envoyés
en cp850 ? C'est configurable quasiment au coup par coup avec les
api de windows ...
Bon, vu que ça marche très bien comme cela, je ne vais pas chercher à
obtenir plus (les api de Windows, c'est de l'hébreu pour moi).

Ma ligne dans samba est maintenant :

message command = "recode u8..csPC850Multilingual..windows-1252 < %s
Post by Jean-Marc Desperrier
%s.tmp; recode windows-1252..u8 %s.tmp; wall `cat %s.tmp`; rm %s;
rm %s.txt &"

et c'est -- presque -- parfait. Il me reste un détail à régler
(comment utiliser xterm au lieu de wall ; je pense avoir un problème
de guillemets) mais vais aller voir dans <f.c.o.l.configuration> pour
cela.

Merci encore.

Loading...