Encodage fichier

19 réponses
AuteurMessage

krucial |
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 06/04/2006 à 12:17

J'expose mon probleme :
J'ai un fichier csv a parser. Le probleme c'est qu'il est encodé, semble-t-il, et que j'ai bcp de mal a en tirer quoi que ce soit. Exemple, un "nano" du fichier me donne ca :

@2^@1^@1^@4^@2^@9^@|^@"^@C^@a^@t^@a^@l^@o^@n^@i^@a^@ ^@B^@e^@r^@n^@a^@ ^@H^@o^@t^@e^@l^@"^@|^@"^@1^@4^@6^@.^@0^@0^@"^@|^@"^$
^@2^@1^@1^@4^@3^@0^@|^@"^@V^@i^@n^@c^@c^@i^@ ^@P^@u^@e^@r^@t^@o^@ ^@C^@h^@i^@c^@o^@"^@|^@"^@9^@5^@.^@0^@0^@"^@|^@"^@C^@a^@s^$
^@2^@1^@1^@4^@3^@6^@|^@"^@G^@e^@n^@e^@r^@a^@t^@o^@r^@ ^@B^@e^@r^@l^@i^@n^@"^@|^@"^@4^@5^@.^@0^@0^@"^@|^@"^@S^@t^@o^@r^@k^@o^$
^@2^@1^@1^@4^@4^@7^@|^@"^@E^@u^@r^@o^@p^@a^@r^@t^@h^@o^@t^@e^@l^@ ^@M^@o^@n^@t^@g^@o^@m^@e^@r^@y^@ ^@ ^@ ^@ ^@ ^@ ^@"^@|^@"^$
^@2^@1^@1^@4^@4^@7^@|^@"^@E^@u^@r^@o^@p^@a^@r^@t^@h^@o^@t^@e^@l^@ ^@M^@o^@n^@t^@g^@o^@m^@e^@r^@y^@ ^@ ^@ ^@ ^@ ^@ ^@"^@|^@"^$
^@2^@1^@1^@4^@5^@2^@|^@"^@S^@a^@i^@n^@t^@ ^@G^@e^@o^@r^@g^@e^@s^@ ^@H^@o^@t^@e^@l^@"^@|^@"^@1^@8^@7^@.^@0^@0^@"^@|^@"^@1^@4^$
^@2^@1^@1^@4^@8^@0^@|^@"^@H^@e^@l^@m^@h^@a^@u^@s^@ ^@S^@w^@i^@s^@s^@ ^@Q^@ ^@H^@o^@t^@e^@l^@"^@|^@"^@1^@5^@5^@.^@0^@0^@"^@|^$
^@2^@1^@1^@4^@8^@3^@|^@"^@P^@&^@V^@ ^@R^@E^@S^@I^@D^@E^@N^@C^@E^@ ^@C^@I^@T^@Y^@ ^@L^@A^@ ^@V^@I^@L^@L^@E^@T^@T^@E^@"^@|^@"^$
^@2^@1^@1^@5^@2^@8^@|^@"^@B^@e^@r^@e^@n^@g^@u^@e^@r^@ ^@I^@V^@"^@|^@"^@8^@2^@.^@0^@0^@"^@|^@"^@D^@e^@s^@p^@u^@i^@g^@ ^@3^@6^$
^@2^@1^@1^@5^@6^@9^@|^@"^@R^@e^@s^@i^@d^@e^@n^@c^@e^@ ^@A^@l^@m^@a^@ ^@M^@a^@r^@c^@e^@a^@u^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@"^@|^@"^$
^@2^@1^@1^@5^@7^@1^@|^@"^@R^@e^@s^@i^@d^@e^@n^@c^@e^@ ^@l^@e^@ ^@D^@i^@a^@m^@a^@n^@t^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@"^@|^@"^$
^@2^@1^@1^@5^@7^@5^@|^@"^@R^@a^@m^@a^@d^@a^@ ^@G^@u^@i^@l^@d^@f^@r^@d^@ ^@L^@t^@h^@r^@h^@d^@"^@|^@"^@1^@0^@2^@.^@0^@0^@"^@|^$
^@2^@1^@1^@5^@7^@6^@|

Un "file" me donne un truc lisible, mais faire des comparaisons sur un bout de chaine, est impossible. Exemple, "FR" dans le fichier est different de "FR" dans ma bdd. Bref, si vous avez une solution, je suis prenneur !

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

bhamp0 | Benjamin
Membre

Photo de bhamp0

Inscrit le : 09/05/2005

# Le 06/04/2006 à 12:52

T'as essayé de le décoder déjà ? Genre transformer tous les @X^ en X ? Ca serait déjà plus lisible

Quand on voit c'qu'on voit, et qu'on entend c'qu'on entend, on a raison d'penser c'qu'on pense !

jerome347 | Jérôme
Membre

Photo de jerome347

Inscrit le : 09/05/2005

# Le 06/04/2006 à 12:52

"Suffit de" remplacer "^@" par "", non ?

Ca donnerait ça :
@211429|"Catalonia Berna Hotel"|"146.00"|"^$
211430|"Vincci Puerto Chico"|"95.00"|"Cas^$
211436|"Generator Berlin"|"45.00"|"Storko^$
211447|"Europarthotel Montgomery "|"^$
211447|"Europarthotel Montgomery "|"^$
211452|"Saint Georges Hotel"|"187.00"|"14^$
211480|"Helmhaus Swiss Q Hotel"|"155.00"|^$
211483|"P&V RESIDENCE CITY LA VILLETTE"|"^$
211528|"Berenguer IV"|"82.00"|"Despuig 36^$
211569|"Residence Alma Marceau "|"^$
211571|"Residence le Diamant "|"^$
211575|"Ramada Guildfrd Lthrhd"|"102.00"|^$
211576|

DarkSquall |
Membre

Photo de DarkSquall

Inscrit le : 27/08/2005

# Le 06/04/2006 à 13:18

Pauvre Krukru, il a plus toute sa tête ?

"Exemple, "FR" dans le fichier est different de "FR" dans ma bdd"

J'ai pas compris? Tu veux dire qu'il s'écrit @F^@R^ ? ou encore autrement?

Isyweb.comOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 06/04/2006 à 13:21

ca serait trop simple

Quand je lis le fichier dans nano, ca s'affiche tout pourri, preuve le fichier est encodé "a la con". Si je fais un cat, ca s'affiche nickel, pourtant, c'est encore encodé de telle sorte que par exemple, si j'exploite la ligne :
info1|info2|FR|info3
je fais :
$liste = explode("|", $ligne);
if($liste[2] == "FR")
echo "caca";
else
echo "pipi";

et bin, ca va m'afficher "pipi".
Comprendo ?

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

devtribu | Olivier
Modérateur

Photo de devtribu

Inscrit le : 16/06/2005

# Le 06/04/2006 à 13:23

tu as essayé les fonctions du type utf8_decode ?

Février 2019, mon futur livre Tout JavaScript chez Dunod https://amzn.to/2PoLd0fOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 06/04/2006 à 13:29

Ouais, ca fait rien :/

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

bhamp0 | Benjamin
Membre

Photo de bhamp0

Inscrit le : 09/05/2005

# Le 06/04/2006 à 14:01

C'est pas un problème de format : UNIX/DOS/MAC ? ASCII/EBCDIC/Unicode ?

Quand on voit c'qu'on voit, et qu'on entend c'qu'on entend, on a raison d'penser c'qu'on pense !

jerome347 | Jérôme
Membre

Photo de jerome347

Inscrit le : 09/05/2005

# Le 06/04/2006 à 14:19

UNIX/DOS/MAC => oui, j'allais proposer ça.
J'avais eu le souci pour le fichier d'hotelclub je crois.

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 06/04/2006 à 14:26

UNIX/DOS/MAC, il n'y a que les "retour chariot" qui changent à ma connaissance. Donc aucun impact ici.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 06/04/2006 à 14:30

bhamp0 a dit :
C'est pas un problème de format : UNIX/DOS/MAC ? ASCII/EBCDIC/Unicode ?


Pt le probleme c'est que je n'y connais rien. Comment passer un fichier d'un format a un autre ?

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

jerome347 | Jérôme
Membre

Photo de jerome347

Inscrit le : 09/05/2005

# Le 06/04/2006 à 14:36

Bool a dit :
UNIX/DOS/MAC, il n'y a que les "retour chariot" qui changent à ma connaissance. Donc aucun impact ici.

Je confirme cependant que le fichier d'hotelclub que j'arrivais bien à voir sous windows était illisible et avec les même caractères que voit JC sous linux.

devtribu | Olivier
Modérateur

Photo de devtribu

Inscrit le : 16/06/2005

# Le 06/04/2006 à 14:37

Ca vient peut etre aussi du transfert FTP (mode binary ou text)

sinon tous les editeurs de texte (sous windows) font le changement d'encodage

Février 2019, mon futur livre Tout JavaScript chez Dunod https://amzn.to/2PoLd0fOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 06/04/2006 à 15:02

jerome347 : faut voir l'éditeur aussi... la plupart tout comme UltraEdit font toutes les conversions necessaires à la volée. Et ca, c'est pas nano ou vi qui vont le faire ;)

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

deblok | Jonathan
Modérateur

Photo de deblok

Inscrit le : 09/05/2005

# Le 06/04/2006 à 15:07

et si tu fait print_r($liste) ca te donne quoi ?

John VIDOR
Président JVWEB
Liens SponsorisésOuvrir dans une nouvelle fenetre - Référencement NaturelOuvrir dans une nouvelle fenetre - ErgonomieOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 06/04/2006 à 21:21

jerome347 a dit :
Bool a dit :
UNIX/DOS/MAC, il n'y a que les "retour chariot" qui changent à ma connaissance. Donc aucun impact ici.

Je confirme cependant que le fichier d'hotelclub que j'arrivais bien à voir sous windows était illisible et avec les même caractères que voit JC sous linux.


Tu as resolu ca comment ? Perso, j'ai fait un vieux script qui urlencode puis urldecode le tout en trimant chaque caractere, et ca marche

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

jerome347 | Jérôme
Membre

Photo de jerome347

Inscrit le : 09/05/2005

# Le 07/04/2006 à 10:00

krucial a dit :Tu as resolu ca comment ?

Ouverture avec Textpad sous windows et réenregistrement en format UNIX. A l'époque je faisais pas encore de scripts toutotomatik.

DarkSquall |
Membre

Photo de DarkSquall

Inscrit le : 27/08/2005

# Le 07/04/2006 à 10:38

[Hors sujet on] Je sais pas vous, mais je vois pas tout le cadre du topic. Il est rogner a droite. Impossible de citer.
[HS off]

Isyweb.comOuvrir dans une nouvelle fenetre

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 07/04/2006 à 10:56

darksquall> oui, je l'avais signalé a julgates, moi c'est pareil (XP + IE6)

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 09/01/2008 à 00:08

Je deterre car j'ai trouvé.

Il suffit de tester l'encodage du fichier. Une jolie petite fonction pour ca :


function get_charset($string)
{
if (substr($string, 0, 4) == "\0\0\xFE\xFF") return 'UTF-32BE'; // Big Endian
if (substr($string, 0, 4) == "\xFF\xFE\0\0") return 'UTF-32LE'; // Little Endian
if (substr($string, 0, 2) == "\xFE\xFF") return 'UTF-16BE'; // Big Endian
if (substr($string, 0, 2) == "\xFF\xFE") return 'UTF-16LE'; // Little Endian
if (substr($string, 0, 3) == "\xEF\xBB\xBF") return 'UTF-8';
// heuristics
if ($string[0] == "\0" && $string[1] == "\0" && $string[2] == "\0" && $string[3] != "\0") return 'UTF-32BE';
if ($string[0] != "\0" && $string[1] == "\0" && $string[2] == "\0" && $string[3] == "\0") return 'UTF-32LE';
if ($string[0] == "\0" && $string[1] != "\0" && $string[2] == "\0" && $string[3] != "\0") return 'UTF-16BE';
if ($string[0] != "\0" && $string[1] == "\0" && $string[2] != "\0" && $string[3] == "\0") return 'UTF-16LE';

return false;
}


Ensuite, reste plus qu'a convertir :


$charset = get_charset($fichier);
if($charset)
$text = mb_convert_encoding($text, 'ISO-8859-1', $charset);


Le script complet est dispo là :
http://labs.brotherli.ch/vcfconvert/Ouvrir dans une nouvelle fenetre

(Message édité le 09-01-2008 à 00h29 par krucial)

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 14:43:14 | Généré en 11.19ms | Contacts | Mentions légales |