de l'unicode vers l'iso ISO-8859-1[résolu]

de l'unicode vers l'iso ISO-8859-1[résolu] - PHP - Programmation

Marsh Posté le 02-09-2004 à 22:07:58    

Bonsoir,
voila plusieurs semaine que je m'arrache les cheveux sur ce problème sans entrevoir de solutions...
j'ai un fichier texte, qui contient une sauvegarde de sms nokia (donc une répétition de données selon une syntaxe donnée). Ce fichier semble etre etre codé selon le charset unicode...
Après avoir découpé les parties m'interessant grâce à php, je les affiche dans un explorateur (normal !)
Tout semble à premiere vue lisible
 
Ex :  
Message 7
Type : PIT_MESSAGE_INBOX
Message : Ta pa tor
Expediteur : +33664300000
Date : 2004-08-10
Heure : 00:36
 
Mais si on regarde dans la source voila ce qu'on peut lire :
<b>Message 7</b><br>Type : P I T _ M E S S A G E _ I N B O X <br>
Message : T a p a t o r <br>
Expediteur : + 3 3 6 6 4 3 0 0 0 0 0 <br>
Date : 2 0 0 4 - 0 8 - 1 0 <br>
Heure : 0 0 : 3 6 <br><br>
 
Les espaces(ou autres caracteres vides, je ne sais pas trop) rendent l'utilisation des variables (pour mettre dans une base de données par exemple) totalement inexploitables...
 
J'ai essayé les fonctions fournies avec php (utf8_decode...) mais aucune n'est efficace, il y a bien la libraire recode, mais je travaille exclusivement sous windows !
C'est vrai que mon probleme semble un peu complexe, si vous voulez de plus amples détails, contactez moi par mail, ou sur msn avec la meme adresse...
 
merci d'avance


Message édité par dpro le 03-09-2004 à 21:30:41
Reply

Marsh Posté le 02-09-2004 à 22:07:58   

Reply

Marsh Posté le 02-09-2004 à 22:14:03    

Que veux tu dire par inexploitable?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-09-2004 à 22:16:56    

par exemple, si je veux mettre la date en timestamp unix, c'est impossible....
en fait, si je connaissais le caractère qui se trouve entre les autres je pourrais le virer avec strtr... mais la c étrange, pcke c'est comme si c'était un espace sans en etre un !

Reply

Marsh Posté le 02-09-2004 à 22:27:27    

parce que ca n'est pas un caractere de padding, mais quelque chose de variable, et que le codage utilise 16 bits (rarement deux fois 16)
C'est a toi de choisir: soit tu stoque tout en unicode dans ta base (et tu convertis les données non unicode en unicode), soit tu convertis tout de Unicode vers qque chose qui te convienne.
A vue de nez, l'unicode que tu as a l'air d'utiliser le codage UTF16. Ca doit pas etre tres complique de trouver un codage UTF16 -> Isolatin 1 qui vire ce qui n'est pas Isolatin1 dans les données de depart.  
A+,


Message édité par gilou le 02-09-2004 à 22:32:14

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-09-2004 à 22:46:30    

rah ouai, j'ai essayé pas mal de trucs mais sans succès, si tu as un peu de temps, et que ça ne te dérange pas de jetter un coup d'oeil ça m'aiderai beaucoup...

Reply

Marsh Posté le 02-09-2004 à 22:56:59    

Apparement, en php il faut utiliser les fonctions mb_* :
http://www.nexen.net/docs/php/annotee/ref.mbstring.php
 
Mais le module n'est pas activé par défaut si j'ai bien compris...
 
edit : notamment : http://www.nexen.net/docs/php/anno [...] iables.php


Message édité par pascal_ le 02-09-2004 à 22:58:07
Reply

Marsh Posté le 03-09-2004 à 06:20:27    

j'ai jeté un rapide coup d'oeil ce matin aux fonctions mb_; ça me parait plutot compliqué, comment puis-je exploiter les chaines ascii ???
Bon, vu que je rentre en cours dans qq heures je n'ai pas le temps d'approfondir mes recherches mais ce soir ^^...
si qqn a un exemple concret de code avec les fctions mb_, ça serait bienvenue.. :)

Reply

Marsh Posté le 03-09-2004 à 10:58:13    

Lis la doc. Il y a un exemple en bas de page sur :
 http://www.nexen.net/docs/php/anno [...] iables.php
 
Tu devrais faire qqchose comme :
 

Code :
  1. $interenc = mb_internal_encoding( 'ASCII' ); // ou bien ISO-8859-1
  2. $inputenc = mb_convert_variables($interenc, "UTF-16", $taVariable);
  3. echo $taVariable


Reply

Marsh Posté le 03-09-2004 à 18:40:48    

merci, mais c'était trop beau pour marcher....
j'ai lu et relu la doc, mais ça ne marche tjs pas !!!
il me sort un warning :  
Warning: mb_convert_variables(): Unknown encoding "1"
j'ai tourné le pb ds tt les sens sans que rien n'y change..
je commence à désésperer :(

Reply

Marsh Posté le 03-09-2004 à 21:30:12    

voilà, grâce à ric sur le forum de nexen, j'ai trouvé la solution; il fallait tout simplement que je supprime le caractère ascii 0 de chaque variable

Code :
  1. $trans = array(chr(0)=>"" );
  2. $type = strtr($type, $trans);


et ça marche sur des roulettes ^^
merci à tous de m'avoir aidé  :bounce:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed