Discussion:
probleme de lecture d'yn fichier texte.
(trop ancien pour répondre)
kurtz le pirate
2014-05-30 14:33:15 UTC
Permalink
bonjour,

j'ai un fichier texte (convertion pdf/texte faite avec automator) que
j'ai du mal à lire.

le dump du début du fichier donne :
00000000: FF FE 4C 00 6F 00 6F 00 ..L.o.o.
00000008: 6B 00 69 00 6E 00 67 00 k.i.n.g.
00000010: 20 00 66 00 6F 00 72 00 .f.o.r.
00000018: 20 00 52 00 65 00 61 00 .R.e.a.
00000020: 6C 00 20 00 45 00 78 00 l. .E.x.
...

il semblere donc que se soit du 'UTF-16 Little Endian' puisque le
fichier commence avec FF FE.

je lis le fichier de cette manière :

open(FH, "< :encoding(UTF-16)", $fileName)
or die "Error openning $fileName: $!\n";
while (<FH>) {
chomp;
print ">>$_\n";
}
Looking for Real Exam Questions for IT Certification Exams!
We guarantee you can pass any IT certification exam at your first
attempt with just 10-12
hours study of our guides.
Our study guides contain actual exam questions, you will get word to
word same on your actual test; accurate answers with detailed
explanation verified by experts and all graphics and drag-n-drop
exhibits shown just as on the real test.
To test the quality of our guides, you can download the one-fourth
portion of any guide from http://www.certificationking.com absolutely free.
...

à chaque boucle, plusieurs lignes sont lues dans le fichier.
le CR semble ignoré. pourtant le dump montre bien un CR(0x0D) à la fin
de chaque ligne :

00000070: 61 00 6D 00 73 00 21 00 a.m.s.!.
00000078: 0D 00 57 00 65 00 20 00 ..W.e. .
^^
donc, comment ligne ligne par ligne un fichier en UTF-16 ?



autre problème, à l'execution du perl, il y a des tas d'erreur du genre:

Wide character in print <FH> line X.
perl n'aime pas certain caracteres ?



merci d'avance de votre aide.


---
Kurtz le pirate
Compagnie de la Banquise
Francois Lafont
2014-06-02 00:05:36 UTC
Permalink
Bonsoir,

Juste pour info, je n'ai pas de problème pour lire un fichier
utf-16 LE sur ma Debian Wheezy avec Perl 5.14.2 et avec ce bout
de code (test.pl) :

---------------------------------------------------
#!/usr/bin/perl

use strict;
use warnings;
binmode(STDOUT, ':encoding(UTF-8)');

for my $filename (@ARGV) {

open(FH, "< :encoding(UTF-16)", $filename)
or die "Error when openning $filename: $!\n";

while (<FH>) {
chomp;
print ">>$_\n";
}

}
---------------------------------------------------

Je me suis aidé de cette page là :
http://www.perlmonks.org/?node_id=719216

Voici un copier-coller de mon terminal :

$ hexdump -C text.txt
00000000 ff fe 4f 00 68 00 20 00 6c 00 65 00 20 00 62 00 |..O.h. .l.e. .b.|
00000010 65 00 6c 00 20 00 e9 00 6c 00 e9 00 70 00 68 00 |e.l. ...l...p.h.|
00000020 61 00 6e 00 74 00 0d 00 0a 00 4f 00 68 00 20 00 |a.n.t.....O.h. .|
00000030 6c 00 65 00 20 00 62 00 65 00 6c 00 20 00 e9 00 |l.e. .b.e.l. ...|
00000040 6c 00 e9 00 70 00 68 00 61 00 6e 00 74 00 0d 00 |l...p.h.a.n.t...|
00000050 0a 00 0d 00 0a 00 |......|
00000056

$ file -i text.txt
text.txt: text/plain; charset=utf-16le

$ ./test.pl text.txt > out

$ file -i out
out: text/plain; charset=utf-8

$ od -c out
0000000 > > O h l e b e l 303 251 l 303
0000020 251 p h a n t \r \n > > O h l e
0000040 b e l 303 251 l 303 251 p h a n t \r \n
0000060 > > \r \n
0000064
--
François Lafont
Olivier Miakinen
2014-06-02 05:51:20 UTC
Permalink
Bonjour,

Je ne connais pas (encore) perl et je ne suis pas sur Macintosh, mais
Post by Francois Lafont
Juste pour info, je n'ai pas de problème pour lire un fichier
utf-16 LE sur ma Debian Wheezy avec Perl 5.14.2 et avec ce bout
[...]
$ hexdump -C text.txt
00000000 ff fe 4f 00 68 00 20 00 6c 00 65 00 20 00 62 00 |..O.h. .l.e. .b.|
00000010 65 00 6c 00 20 00 e9 00 6c 00 e9 00 70 00 68 00 |e.l. ...l...p.h.|
00000020 61 00 6e 00 74 00 0d 00 0a 00 4f 00 68 00 20 00 |a.n.t.....O.h. .|
^^^^^ ^^^^^

Ton fichier, lu sur Linux, contient 0d 00 suivi de 0a 00 (CR + LF)
alors que le fichier de kurtz le pirate, qui est sur Mac, ne contient
que 0D 00 (CR seul).

Cordialement,
--
Olivier Miakinen
Nicolas George
2014-06-02 07:41:25 UTC
Permalink
kurtz le pirate , dans le message
Post by kurtz le pirate
à chaque boucle, plusieurs lignes sont lues dans le fichier.
le CR semble ignoré. pourtant le dump montre bien un CR(0x0D) à la fin
Le caractère CR n'a aucune signification particulière pour la délimitation
des lignes. Tu confonds avec LF.
Paul Gaborit
2014-06-02 08:48:31 UTC
Permalink
À (at) 02 Jun 2014 07:41:25 GMT,
Post by Nicolas George
kurtz le pirate , dans le message
Post by kurtz le pirate
à chaque boucle, plusieurs lignes sont lues dans le fichier.
le CR semble ignoré. pourtant le dump montre bien un CR(0x0D) à la fin
Le caractère CR n'a aucune signification particulière pour la délimitation
des lignes. Tu confonds avec LF.
Quelle drôle d'affirmation ! Il semble que vous n'avez jamais travaillé
avec un Mac. Lisez le début de 'perlport' pour en savoir plus...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Marc Espie
2014-06-02 10:10:37 UTC
Permalink
Par contre, un fichier en UTF16 avec des CR comme fin de ligne, c'est
original. Me semblait que cette horreur d'UTF16 etait restee cantonnee a
Windows ? mais peut-etre me trompe-je et rencontre-t-on ca aussi sur mac.
Nicolas George
2014-06-02 11:50:27 UTC
Permalink
Post by Paul Gaborit
Quelle drôle d'affirmation ! Il semble que vous n'avez jamais travaillé
avec un Mac.
Un OS pourri mort depuis le siècle dernier ? En effet, ça inexiste.
Paul Gaborit
2014-06-02 20:37:56 UTC
Permalink
À (at) 02 Jun 2014 11:50:27 GMT,
Post by Nicolas George
Post by Paul Gaborit
Quelle drôle d'affirmation ! Il semble que vous n'avez jamais travaillé
avec un Mac.
Un OS pourri mort depuis le siècle dernier ? En effet, ça inexiste.
Du troll bien velu ? Ou alors votre expérience sur Mac date du siècle
dernier...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Nicolas George
2014-06-02 21:03:49 UTC
Permalink
Post by Paul Gaborit
Du troll bien velu ? Ou alors votre expérience sur Mac date du siècle
dernier...
Le pseudo-Unix qu'apple fourgue de nos jours utilise LF comme séparateur de
lignes.
Paul Gaborit
2014-06-02 22:30:18 UTC
Permalink
À (at) 02 Jun 2014 21:03:49 GMT,
Post by Nicolas George
Post by Paul Gaborit
Du troll bien velu ? Ou alors votre expérience sur Mac date du siècle
dernier...
Le pseudo-Unix qu'apple fourgue de nos jours utilise LF comme séparateur de
lignes.
C'est un Unix (pas plus pseudo que n'importe quel Linux ou *BSD) qui
utilise LF seul. Mais il y aussi de nombreux progammes en GUI qui
continuent à utiliser le CR seul. Au passage, rien ne l'interdit même en
dehors d'un Mac. C'est une convention comme une autre pour un fichier
texte.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Nicolas George
2014-06-02 23:31:24 UTC
Permalink
Post by Paul Gaborit
C'est un Unix (pas plus pseudo que n'importe quel Linux ou *BSD)
Assez peu respectueux des standards, à part quand apple graisse les rouage
des comités de certification. Et absolument pas respectueux des usages.
Post by Paul Gaborit
Au passage, rien ne l'interdit même en
dehors d'un Mac. C'est une convention comme une autre pour un fichier
texte.
Non. Un fichier texte au sens Unix, et partant au sens Perl, est formé de
lignes (de moins de 1024 caractères) terminées par LF. C'est spécifiquement
défini. Les applications standard de la toolbox Unix ne sont pas tenues
d'être capables de digérer quoi que ce soit d'autres, même si c'est
évidemment mieux qu'elles le soient.
Paul Gaborit
2014-06-03 00:55:12 UTC
Permalink
À (at) 02 Jun 2014 23:31:24 GMT,
Post by Nicolas George
Post by Paul Gaborit
C'est un Unix (pas plus pseudo que n'importe quel Linux ou *BSD)
Assez peu respectueux des standards, à part quand apple graisse les rouage
des comités de certification. Et absolument pas respectueux des usages.
La plupart des autres grandes entreprises qui développent un ou des OS
ne sont pas plus reluisantes sur ces aspects à en croire ce qui se
raconte (mais tout cela est-il vrai ?).
Post by Nicolas George
Post by Paul Gaborit
Au passage, rien ne l'interdit même en
dehors d'un Mac. C'est une convention comme une autre pour un fichier
texte.
Non. Un fichier texte au sens Unix, et partant au sens Perl, est formé de
lignes (de moins de 1024 caractères) terminées par LF. C'est spécifiquement
défini. Les applications standard de la toolbox Unix ne sont pas tenues
d'être capables de digérer quoi que ce soit d'autres, même si c'est
évidemment mieux qu'elles le soient.
C'est vraiment n'importe quoi !

Perl n'est pas un langage destiné uniquement à Unix. Et même si c'était
le cas, son but initial est d'être capable de lire tous les fichiers
textes sans faire d'ostracisme à deux balles basé sur des choix
arbitraires qu'il faudrait défendre becs et ongles. En informatique,
l'intégrisme n'est pas une bonne valeur.

Au passage, sur Internet, la plupart des protocoles réseau textuels
utilisent le CRLF comme fin de lignes. Et pourtant, ils n'ont pas été
conçu par Microsoft !
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Nicolas George
2014-06-03 05:33:05 UTC
Permalink
Post by Paul Gaborit
La plupart des autres grandes entreprises qui développent un ou des OS
ne sont pas plus reluisantes sur ces aspects à en croire ce qui se
raconte (mais tout cela est-il vrai ?).
Si on regarde les détails techniques, qui se manifestent essentiellement par
le nombre de workarounds dans les différents codes libres qu'on peut étudier
destinés à contourner des entorses aux standards pour faire fonctionner les
logiciels sous différents OS, il n'y a pas photo : les Unix libres sont
largement plus respectueux des standards que celui d'apple.
Post by Paul Gaborit
C'est vraiment n'importe quoi !
Perl n'est pas un langage destiné uniquement à Unix. Et même si c'était
le cas, son but initial est d'être capable de lire tous les fichiers
textes sans faire d'ostracisme à deux balles basé sur des choix
arbitraires qu'il faudrait défendre becs et ongles. En informatique,
l'intégrisme n'est pas une bonne valeur.
Perl est parfaitement capable de gérer des fichiers de n'importe quelle
forme, mais ses structures syntaxiques et ses réglage par défaut sont prévus
pour des fichiers texte au sens Unix, c'est un fait.
Post by Paul Gaborit
Au passage, sur Internet, la plupart des protocoles réseau textuels
utilisent le CRLF comme fin de lignes. Et pourtant, ils n'ont pas été
conçu par Microsoft !
Et c'est aussi une source d'ennuis sans fin. Tu noteras en outre que dans ce
cas, la plupart du temps c'est bien le LF qui sert de délimiteur, le CR
étant plus ou moins optionnel et essentiellement traité comme de l'espace
inutile.
Paul Gaborit
2014-06-03 06:28:16 UTC
Permalink
À (at) 03 Jun 2014 05:33:05 GMT,
Post by Nicolas George
Post by Paul Gaborit
La plupart des autres grandes entreprises qui développent un ou des OS
ne sont pas plus reluisantes sur ces aspects à en croire ce qui se
raconte (mais tout cela est-il vrai ?).
Si on regarde les détails techniques, qui se manifestent essentiellement par
le nombre de workarounds dans les différents codes libres qu'on peut étudier
destinés à contourner des entorses aux standards pour faire fonctionner les
logiciels sous différents OS, il n'y a pas photo : les Unix libres sont
largement plus respectueux des standards que celui d'apple.
Je réponds sur un point (le graissage des rouages par les entreprises)
mais tu argumentes sur un autre (la compatibilité).

Ce dernier argument mériterait d'être étayé : combien reste-t-il d'Unix
propriétaires réellement distribués en plus de Mac OS X ? Y a-t-il
réellement plus de code spécifique à Mac OS X qu'à Linux ou à l'un des
*BSD ?
Post by Nicolas George
Post by Paul Gaborit
C'est vraiment n'importe quoi !
Perl n'est pas un langage destiné uniquement à Unix. Et même si c'était
le cas, son but initial est d'être capable de lire tous les fichiers
textes sans faire d'ostracisme à deux balles basé sur des choix
arbitraires qu'il faudrait défendre becs et ongles. En informatique,
l'intégrisme n'est pas une bonne valeur.
Perl est parfaitement capable de gérer des fichiers de n'importe quelle
forme, mais ses structures syntaxiques et ses réglage par défaut sont prévus
pour des fichiers texte au sens Unix, c'est un fait.
Encore une fois, c'est faux. Lire 'perlport' pour comprendre que Perl
s'adapte au système sur lequel il est installé. Quant à la
syntaxe... que vient-elle faire ici ?
Post by Nicolas George
Post by Paul Gaborit
Au passage, sur Internet, la plupart des protocoles réseau textuels
utilisent le CRLF comme fin de lignes. Et pourtant, ils n'ont pas été
conçu par Microsoft !
Et c'est aussi une source d'ennuis sans fin. Tu noteras en outre que dans ce
cas, la plupart du temps c'est bien le LF qui sert de délimiteur, le CR
étant plus ou moins optionnel et essentiellement traité comme de l'espace
inutile.
Ce n'est pas le CR ou le CRLF qui sont sources d'ennuis. C'est le fait
qu'à chaque fois qu'un choix arbitraire existe, on est sûr de rencontrer
tous les choix possibles. Et cette situation n'est pas imputable à tel
ou tel. C'est comme le "Little Endian" et le "Big Endian". Les deux
existent, c'est un fait... Mais il n'y en a pas un qui est mieux (ou
plus normal) que l'autre !
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Marc Espie
2014-06-03 18:23:05 UTC
Permalink
Non, mais faut que t'arrete, la, Nicolas.

On parle de perl, hein, le langage qui a erige en devise "il y a plus
d'une facon de faire les choses".

Okay, on a compris, pour toi, en dehors d'Unix, point de salut. Mais
bon, on est dans fr.comp.lang.perl, pas fr.system.unix.bigot, alors sur
ce cote-la, laisse les gens s'emmerder avec les OS qu'ils veulent et les
formats de fichier qu'ils veulent.

1/ si ca se trouve, ils ont pas le choix;
2/ l'enorme interet de perl, c'est *precisement* de pouvoir bosser avec
des trucs bizarres et de rester a peu pres sain d'esprit.
celinedonnot
2014-09-01 14:10:27 UTC
Permalink
Post by kurtz le pirate
bonjour,
j'ai un fichier texte (convertion pdf/texte faite avec automator) que
j'ai du mal à lire.
00000000: FF FE 4C 00 6F 00 6F 00 ..L.o.o.
00000008: 6B 00 69 00 6E 00 67 00 k.i.n.g.
00000010: 20 00 66 00 6F 00 72 00 .f.o.r.
00000018: 20 00 52 00 65 00 61 00 .R.e.a.
00000020: 6C 00 20 00 45 00 78 00 l. .E.x.
...
il semblere donc que se soit du 'UTF-16 Little Endian' puisque le
fichier commence avec FF FE.
open(FH, "< :encoding(UTF-16)", $fileName)
or die "Error openning $fileName: $!\n";
while (<FH>) {
chomp;
print ">>$_\n";
}
Looking for Real Exam Questions for IT Certification Exams!
We guarantee you can pass any IT certification exam at your first
attempt with just 10-12
hours study of our guides.
Our study guides contain actual exam questions, you will get word to
word same on your actual test; accurate answers with detailed
explanation verified by experts and all graphics and drag-n-drop
exhibits shown just as on the real test.
To test the quality of our guides, you can download the one-fourth
portion of any guide from http://www.certificationking.com absolutely free.
...
à chaque boucle, plusieurs lignes sont lues dans le fichier.
le CR semble ignoré. pourtant le dump montre bien un CR(0x0D) à la fin
00000070: 61 00 6D 00 73 00 21 00 a.m.s.!.
00000078: 0D 00 57 00 65 00 20 00 ..W.e. .
^^
donc, comment ligne ligne par ligne un fichier en UTF-16 ?
Wide character in print <FH> line X.
perl n'aime pas certain caracteres ?
merci d'avance de votre aide.
---
Kurtz le pirate
Compagnie de la Banquise
Bonne nouvelle a tous
Offre de prêt d'argent sans aucun frais à payer a l'avance
je vous envoie ce témoignage suite à un service que m’a rendu une Monsieu
lorsque j'étais à la recherche d’un prêt d’argent. Grace à Monsieur Brun Dupon
j'ai retrouvé les sourires aux lèvres. C’est grâce à elle que j'ai reçu un prê
de 25.000€ et deux de mes collègues ont également reçu des prêts de ce monsieu
sans aucunes difficultés. Je vous conseille de ne plus vous trompez de personn
si vous voulez effectivement faire une demande de prêt d’argent pour votr
projet et tout autre. Je publie ce message parce que Monsieur Brun Dupont m’
fait du bien avec ce prêt. C'est par le biais d'un ami que j'ai rencontré c
monsieur honnête et généreuse qui m’a permis d’obtenir ce prêt. Alors je vou
conseille de la contacter et elle vous satisfera pour tous les services que vou
la demanderez Voici son adresse électronique: ***@hotmail.fr
pollet
2014-11-05 14:03:35 UTC
Permalink
Post by kurtz le pirate
bonjour,
j'ai un fichier texte (convertion pdf/texte faite avec automator) que
j'ai du mal à lire.
00000000: FF FE 4C 00 6F 00 6F 00 ..L.o.o.
00000008: 6B 00 69 00 6E 00 67 00 k.i.n.g.
00000010: 20 00 66 00 6F 00 72 00 .f.o.r.
00000018: 20 00 52 00 65 00 61 00 .R.e.a.
00000020: 6C 00 20 00 45 00 78 00 l. .E.x.
...
il semblere donc que se soit du 'UTF-16 Little Endian' puisque le
fichier commence avec FF FE.
open(FH, "< :encoding(UTF-16)", $fileName)
or die "Error openning $fileName: $!\n";
while (<FH>) {
chomp;
print ">>$_\n";
}
Looking for Real Exam Questions for IT Certification Exams!
We guarantee you can pass any IT certification exam at your first
attempt with just 10-12
hours study of our guides.
Our study guides contain actual exam questions, you will get word to
word same on your actual test; accurate answers with detailed
explanation verified by experts and all graphics and drag-n-drop
exhibits shown just as on the real test.
To test the quality of our guides, you can download the one-fourth
portion of any guide from http://www.certificationking.com absolutely free.
...
à chaque boucle, plusieurs lignes sont lues dans le fichier.
le CR semble ignoré. pourtant le dump montre bien un CR(0x0D) à la fin
00000070: 61 00 6D 00 73 00 21 00 a.m.s.!.
00000078: 0D 00 57 00 65 00 20 00 ..W.e. .
^^
donc, comment ligne ligne par ligne un fichier en UTF-16 ?
Wide character in print <FH> line X.
perl n'aime pas certain caracteres ?
merci d'avance de votre aide.
---
Kurtz le pirate
Compagnie de la Banquise
Bonjourr Mme et Mr
Moi je suis Mr Pollet serge. Je suis de nationalité française, ma capacité d
prêteur va jusqu’à 1.000 000 € par particulier. Vu les nombreuses arnaques qu
existe aujourd’hui dans le prêt entre particulier, je vous informe que beaucou
de précautions ont été prise afin d’assurer et garantie les personnes qui fon
les demandes de prêt.Mon taux d’intérêt est unique et il est non négociable
fixé à 2% sur la valeur total demandé. J’aimerais aussi vous demander de fair
très attention aux offres venant d’Afrique (Côte d’Ivoire, Bénin et autres…)
car presque toutes les personnes avec qui j’entre en contact ont déjà ét
victime d’arnaque.Ces arnaques ont tellement pris de l’ampleur à tel point qu
même les chaînes de télévision en parlent (M6, et autre chaîne d’Afrique)Mo
offre est sérieuse, vous pourriez vous en rendre compte à travers la procédur
qui est la procédure légale d’octroi de prêt entre particulier.De grâc
j’aimerais être contacté par des personnes sérieuses, étant en mesure d
rembourser les prêts. Les remboursements débutent 3 mois après que les fond
soit viré.Si vous êtes intéressé, alors n’hésitez à me contacter sur mon mai
qui est: ***@gmail.com
Pour toutes questions ou autres merci de me contacter par mail ou
Tel.078 849 8627

Continuer la lecture sur narkive:
Loading...