Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mission impossible (convert utf-8)

7 réponses
Avatar
Etienne SOBOLE
Salut.

alors attention ce message va etre compliqué !!!
j'ai un formulaire en UTF8
une personne met dedans un texte via un copier coller depuis word contenant
le carcatère
' (code ascii 0x92)
et
? (code ascii 0x80)

evidement comme le coller est de l'utf-8 dans le formulaire c'est deja plus
les meme caractère...
donc a present l'idée c'est d'arriver a envoyer ca a quelqu'un qui n'a pas
windows

premier idée:
utf8-decode : alors la pas de probleme, ca marche pas car les deux
caractères ne sont pas reconnus par cette fonction
deuxième idée:
iconv("utf-8", "windows-1252", $text) : alors la c'est bien, on arrive a
retrouver notre chaine originale... mais bon elle est en windows-1252 et
donc incompréhensible pour un non windows
troisieme idée:
iconv("utf-8", "iso-8859-1", $text) : le caractère ? n'est pas reconnu...
quatrieme idée:
iconv("utf-8", "iso-8859-15", $text) : alors la le ? est bien converti, mais
les caractère windows (genre le 0x92) interrompe tout simplement le
traitement de la chaine de caractère... il manque donc la fin...

bref...
je me dis alors...
le vais convertir en "windows-1252" puis remplacer tous les caractères
windows (ceux compris entre 0x81 et 0x9f) par des equivalents plus ou moins
proche dans le charset iso-8859-15...
et la j'arrive a quelques chose d'acceptable, mais comment est ce que je
fais pour remplacer mon 0x80 par un ? dans le charset iso-8859-15 ?

voila donc help...
merci
Etienne

PS : je suis aussi preneur de toute solution capable de convertir un text
UTF-8 provenant de windows en iso-8859-15 meme si quelques caractères se
sont vus un poils modifiés...

7 réponses

Avatar
Etienne SOBOLE
Comme tout n'est pas franchement lisible dans mon mail
0x92 est une sorte de quote ' oblique
0x80 est quant a lui le caractère euros...

voila donc ce que je cherche a faire c'est remplacer tous les caracter entre
0x81 et 0x9f par autre chose (voir meme des blancs à la limite, j'adapterai
apres...)
et remplacer le 0x80 par le caractère euro du iso-8859-15

voila.
Etienne
Avatar
loufoque
Etienne SOBOLE a dit le 19/01/2005 15:30:

iconv("utf-8", "iso-8859-15", $text) : alors la le ? est bien converti, mais
les caractère windows (genre le 0x92) interrompe tout simplement le
traitement de la chaine de caractère... il manque donc la fin...



iconv('utf-8', 'ISO-8859-15//TRANSLIT', $text)
ou
iconv('utf-8', 'ISO-8859-15//IGNORE', $text)
suivant l'effet voulu.

cf. la doc de la fonction iconv.

Tout de même, je ne comprends pas l'intérêt du truc.
Quand on a du bel UTF-8, autant le garder.

Avatar
Olivier Miakinen

alors attention ce message va etre compliqué !!!
j'ai un formulaire en UTF8
une personne met dedans un texte via un copier coller depuis word contenant
le carcatère
' (code ascii 0x92)
et
? (code ascii 0x80)


Ces caractères n'existent que dans Windows 1252.

0x92 (Win1252) = 0x2019 (Unicode) = 0xE2 0x80 0x99 (UTF-8)

0x80 (Win1252) = 0x20AC (Unicode) = 0xE2 0x82 0xAC (UTF-8)
= 0xA4 (ISO-8859-15)

Ce qu'il faudrait savoir, c'est sous quelle forme exactement ils
t'arrivent. Il serait même possible qu'ils soient encodés en UTF-8 à
partir d'un code inexistant, ce qui donnerait (non vérifié) : 0xC2 0x80
pour 0x80, et 0xC2 0x92 pour 0x92.

premier idée:
deuxième idée:
troisieme idée:
quatrieme idée:


C'est bien d'avoir des idées, mais auparavant il faudrait savoir de quoi
l'on part. Je veux bien te répondre plus précisément, mais pour le faire
j'aimerais que tu fasses un test : saisir une chaîne connue avec de
l'ascii, des caractères accentués et ces caractères problématiques, et
afficher les valeurs numériques de chaque caractère reçu.

Tu es prêt ? Je te propose de taper dans Word le texte suivant :
"c'est zéro ¤ !" (avec l'apostrophe courbe, bien sur)

[...] comment est ce que je
fais pour remplacer mon 0x80 par un ? dans le charset iso-8859-15 ?


0xA4. Mais l'apostrophe courbe n'existe pas dans cet encodage.

Avatar
Etienne SOBOLE
Tu es prêt ? Je te propose de taper dans Word le texte suivant :
"c'est zéro ¤ !" (avec l'apostrophe courbe, bien sur)


oui c'est typiquement le genre de text que j'ai et qui merdoie...
je tape ca dans word.
je fais un copier coller dans mon formulaire qui est en UTF-8 sous
windows...
je le poste...

ou finale je voudrai l'envoyer en
ISI-8859-15 en remplace le ' (courbe) par un ' normal...

voila.
Etienne

Avatar
Etienne SOBOLE
iconv('utf-8', 'ISO-8859-15//TRANSLIT', $text)
ou
iconv('utf-8', 'ISO-8859-15//IGNORE', $text)
suivant l'effet voulu.


Ah j'avais pas vu ca...
ca marche moyen : ca donne
C'est zéro ¤.
avec le magnifique exemple d'oliver...

cf. la doc de la fonction iconv.


C'est dans la doc de nexen et pas celle de php.net
je suis a moitié pardonné ;)

Tout de même, je ne comprends pas l'intérêt du truc.
Quand on a du bel UTF-8, autant le garder.


Mouaip...
c'est une remarque pertinante... est ce que tout les client mail son capable
de lire un mail en UTF-8?
Parce que mon formulaire il part sous forme de mail apres...

Etienne

Avatar
Etienne SOBOLE
hop hop hop
j'ai dis une connerie... ca marche nickel ton truc...

merci donc...
Etienne
Avatar
Olivier Miakinen
Tu es prêt ? Je te propose de taper dans Word le texte suivant :
"c'est zéro ¤ !" (avec l'apostrophe courbe, bien sur)


oui c'est typiquement le genre de text que j'ai et qui merdoie...


Le symbole euro qui se transforme en symbole monétaire quelque chose
(je ne sais plus son nom exact, certains l'appellent « trou du cul »),
ce n'est pas un problème de Win1252, mais de configuration de ton
Outlook Express.

Alors de deux choses l'une : soit tu changes de logiciel, soit tu vas
sur fr.usenet.8bits chercher les articles de Denis Liégeois, qui est
*le* spécialiste mondialement connu de configuration d'Outlook Express
pour ce qui concerne les encodages de caractères.