j'ai un petit script python cens=C3=A9 ouvrir un fichier journal et affiche=
r son contenu mais comme vous le voyez, une erreur li=C3=A9e =C3=A0 l'encod=
age survient :
-----------------------
import fileinput
import sys
try:
source =3D sys.argv[1:]
except IndexError:
source =3D None
for line in fileinput.input(source):
print(line.strip())
j'ajoute le crochet d'encodage pour d=C3=A9passer l'erreur mais cette fois,=
le script r=C3=A9agit diff=C3=A9remment selon l'entr=C3=A9e utilis=C3=A9e =
:
-----------------------
import fileinput
import sys
try:
source =3D sys.argv[1:]
except IndexError:
source =3D None
for line in fileinput.input(source, openhook=3Dfileinput.hook_encoded("utf-=
8", "ignore")):
print(line.strip())
-----------------------
python3.7.4 myscript.py myfile.log
first line of myfile.log
...
last line of myfile.log
Tu as un caractère non-UTF8 dans le fichier que tu parse (à la position 799 et il s'agit du caractère 0xE8 -- Qu'est-ce qu'un adulte ? Un enfant gonflé d'âge. -+- Simone de Beauvoir -+-
Le Fri, 25 Oct 2019 13:04:57 -0700, lacsaP Patatetom a écrit :
Tu as un caractère non-UTF8 dans le fichier que tu parse (à la position 799 et il s'agit du caractère 0xE8 -- Qu'est-ce qu'un adulte ? Un enfant gonflé d'âge. -+- Simone de Beauvoir -+-
Jo Engo
Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit :
celui-ci fonctionne lorsque le fichier journal est passé en paramètre, mais pas lorsqu'il passé sur l'entrée standard...
Oui j'ai vu, mes excuse donc. Au risque de répondre encore à côté de la plaque, 1 question et 1 suggestion qui n'a rien à voir avec la question Question : où dans le fichier se situe le byte erroné ? (au milieu ou à la fin ?) si c'est à la fin ça peut expliquer la différence de taritement Suggestion Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pas le fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères utf8) -- Le trop de promptitude à l'erreur nous expose. -+- Pierre Corneille -+-
Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit :
celui-ci fonctionne lorsque le fichier journal est passé en paramètre,
mais pas lorsqu'il passé sur l'entrée standard...
Oui j'ai vu, mes excuse donc. Au risque de répondre encore à côté de la
plaque, 1 question et 1 suggestion qui n'a rien à voir avec la question
Question : où dans le fichier se situe le byte erroné ? (au milieu ou à
la fin ?) si c'est à la fin ça peut expliquer la différence de taritement
Suggestion
Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pas le
fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères utf8)
--
Le trop de promptitude à l'erreur nous expose.
-+- Pierre Corneille -+-
Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit :
celui-ci fonctionne lorsque le fichier journal est passé en paramètre, mais pas lorsqu'il passé sur l'entrée standard...
Oui j'ai vu, mes excuse donc. Au risque de répondre encore à côté de la plaque, 1 question et 1 suggestion qui n'a rien à voir avec la question Question : où dans le fichier se situe le byte erroné ? (au milieu ou à la fin ?) si c'est à la fin ça peut expliquer la différence de taritement Suggestion Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pas le fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères utf8) -- Le trop de promptitude à l'erreur nous expose. -+- Pierre Corneille -+-
lacsaP Patatetom
Le dimanche 27 octobre 2019 08:40:28 UTC+1, Jo Engo a écrit :
Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit :
celui-ci fonctionne lorsque le fichier journal est passé en param ètre, mais pas lorsqu'il passé sur l'entrée standard...
Oui j'ai vu, mes excuse donc. Au risque de répondre encore à c ôté de la plaque, 1 question et 1 suggestion qui n'a rien à voir avec la quest ion Question : où dans le fichier se situe le byte erroné ? (au mil ieu ou à la fin ?) si c'est à la fin ça peut expliquer la différenc e de taritement Suggestion Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pa s le fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères ut f8) -- Le trop de promptitude à l'erreur nous expose. -+- Pierre Corneille -+-
il semblerait que le problème soit connu : https://bugs.python.org/iss ue26756 si sys.stdin est utilisé par fileinput alors le hook n'est pas appliqu é, ce qui explique la différence de comportement...
Le dimanche 27 octobre 2019 08:40:28 UTC+1, Jo Engo a écrit :
Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit :
> celui-ci fonctionne lorsque le fichier journal est passé en param ètre,
> mais pas lorsqu'il passé sur l'entrée standard...
Oui j'ai vu, mes excuse donc. Au risque de répondre encore à c ôté de la
plaque, 1 question et 1 suggestion qui n'a rien à voir avec la quest ion
Question : où dans le fichier se situe le byte erroné ? (au mil ieu ou à
la fin ?) si c'est à la fin ça peut expliquer la différenc e de taritement
Suggestion
Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pa s le
fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères ut f8)
--
Le trop de promptitude à l'erreur nous expose.
-+- Pierre Corneille -+-
il semblerait que le problème soit connu : https://bugs.python.org/iss ue26756
si sys.stdin est utilisé par fileinput alors le hook n'est pas appliqu é, ce qui explique la différence de comportement...
Le dimanche 27 octobre 2019 08:40:28 UTC+1, Jo Engo a écrit :
Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit :
celui-ci fonctionne lorsque le fichier journal est passé en param ètre, mais pas lorsqu'il passé sur l'entrée standard...
Oui j'ai vu, mes excuse donc. Au risque de répondre encore à c ôté de la plaque, 1 question et 1 suggestion qui n'a rien à voir avec la quest ion Question : où dans le fichier se situe le byte erroné ? (au mil ieu ou à la fin ?) si c'est à la fin ça peut expliquer la différenc e de taritement Suggestion Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pa s le fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères ut f8) -- Le trop de promptitude à l'erreur nous expose. -+- Pierre Corneille -+-
il semblerait que le problème soit connu : https://bugs.python.org/iss ue26756 si sys.stdin est utilisé par fileinput alors le hook n'est pas appliqu é, ce qui explique la différence de comportement...
lacsaP Patatetom
Le dimanche 27 octobre 2019 09:04:41 UTC+1, lacsaP Patatetom a écrit :
Le dimanche 27 octobre 2019 08:40:28 UTC+1, Jo Engo a écrit :
Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit : > celui-ci fonctionne lorsque le fichier journal est passé en para mètre, > mais pas lorsqu'il passé sur l'entrée standard... Oui j'ai vu, mes excuse donc. Au risque de répondre encore à côté de la plaque, 1 question et 1 suggestion qui n'a rien à voir avec la que stion Question : où dans le fichier se situe le byte erroné ? (au m ilieu ou à la fin ?) si c'est à la fin ça peut expliquer la différe nce de taritement Suggestion Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pas le fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères utf8) -- Le trop de promptitude à l'erreur nous expose. -+- Pierre Corneille -+-
il semblerait que le problème soit connu : https://bugs.python.org/i ssue26756 si sys.stdin est utilisé par fileinput alors le hook n'est pas appli qué, ce qui explique la différence de comportement...
le script ci-dessous fonctionne dans tous les cas : import io import fileinput import sys try: source = sys.argv[1:] except IndexError: source = None sys.stdin = io.TextIOWrapper(sys.stdin.buffer, errors='ignore') for line in fileinput.input(source, openhook=fileinput.hook_encoded('utf- 8', 'ignore')): print(line.strip())
Le dimanche 27 octobre 2019 09:04:41 UTC+1, lacsaP Patatetom a écrit :
Le dimanche 27 octobre 2019 08:40:28 UTC+1, Jo Engo a écrit :
> Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit :
>
> > celui-ci fonctionne lorsque le fichier journal est passé en para mètre,
> > mais pas lorsqu'il passé sur l'entrée standard...
>
>
> Oui j'ai vu, mes excuse donc. Au risque de répondre encore à côté de la
> plaque, 1 question et 1 suggestion qui n'a rien à voir avec la que stion
>
> Question : où dans le fichier se situe le byte erroné ? (au m ilieu ou à
> la fin ?) si c'est à la fin ça peut expliquer la différe nce de taritement
>
> Suggestion
>
> Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pas le
> fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères utf8)
>
> --
> Le trop de promptitude à l'erreur nous expose.
> -+- Pierre Corneille -+-
il semblerait que le problème soit connu : https://bugs.python.org/i ssue26756
si sys.stdin est utilisé par fileinput alors le hook n'est pas appli qué, ce qui explique la différence de comportement...
le script ci-dessous fonctionne dans tous les cas :
import io
import fileinput
import sys
try:
source = sys.argv[1:]
except IndexError:
source = None
sys.stdin = io.TextIOWrapper(sys.stdin.buffer, errors='ignore')
for line in fileinput.input(source, openhook=fileinput.hook_encoded('utf- 8', 'ignore')):
print(line.strip())
Le dimanche 27 octobre 2019 09:04:41 UTC+1, lacsaP Patatetom a écrit :
Le dimanche 27 octobre 2019 08:40:28 UTC+1, Jo Engo a écrit :
Le Sat, 26 Oct 2019 08:15:34 -0700, lacsaP Patatetom a écrit : > celui-ci fonctionne lorsque le fichier journal est passé en para mètre, > mais pas lorsqu'il passé sur l'entrée standard... Oui j'ai vu, mes excuse donc. Au risque de répondre encore à côté de la plaque, 1 question et 1 suggestion qui n'a rien à voir avec la que stion Question : où dans le fichier se situe le byte erroné ? (au m ilieu ou à la fin ?) si c'est à la fin ça peut expliquer la différe nce de taritement Suggestion Comme tu semble attendre de tels problèmes pourquoi ne traites-tu pas le fichier en raw (en 8 bits, sans tenir compte d'*aucun* caractères utf8) -- Le trop de promptitude à l'erreur nous expose. -+- Pierre Corneille -+-
il semblerait que le problème soit connu : https://bugs.python.org/i ssue26756 si sys.stdin est utilisé par fileinput alors le hook n'est pas appli qué, ce qui explique la différence de comportement...
le script ci-dessous fonctionne dans tous les cas : import io import fileinput import sys try: source = sys.argv[1:] except IndexError: source = None sys.stdin = io.TextIOWrapper(sys.stdin.buffer, errors='ignore') for line in fileinput.input(source, openhook=fileinput.hook_encoded('utf- 8', 'ignore')): print(line.strip())