Bonsoir !
Je ne comprends pas ce TraceBack :
txt=contenu.encode('utf-8','ignore')
open(filename+".bak","wb").write(txt)
UnicodeEncodeError: 'ascii' codec can't encode character u'xe9' in position 11676: ordinal not in range(128)
surtout que u'xe9' est un simple é, qui ne devrait pas poser de problème à écrire dans un fichier.
Une idée ?
Bonsoir !
Je ne comprends pas ce TraceBack :
txt=contenu.encode('utf-8','ignore')
open(filename+".bak","wb").write(txt)
UnicodeEncodeError: 'ascii' codec can't encode character u'xe9' in position 11676: ordinal not in range(128)
surtout que u'xe9' est un simple é, qui ne devrait pas poser de problème à écrire dans un fichier.
Une idée ?
Bonsoir !
Je ne comprends pas ce TraceBack :
txt=contenu.encode('utf-8','ignore')
open(filename+".bak","wb").write(txt)
UnicodeEncodeError: 'ascii' codec can't encode character u'xe9' in position 11676: ordinal not in range(128)
surtout que u'xe9' est un simple é, qui ne devrait pas poser de problème à écrire dans un fichier.
Une idée ?
Bonsoir !
Je ne comprends pas ce TraceBack :
txt=contenu.encode('utf-8','ignore')
open(filename+".bak","wb").write(txt)
UnicodeEncodeError: 'ascii' codec can't encode character u'xe9' in position 11676: ordinal not in range(128)
surtout que u'xe9' est un simple é, qui ne devrait pas poser de problème à écrire dans un fichier.
s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
t = u.encode('utf-8', 'ignore')
Une idée ?
Bonsoir !
Je ne comprends pas ce TraceBack :
txt=contenu.encode('utf-8','ignore')
open(filename+".bak","wb").write(txt)
UnicodeEncodeError: 'ascii' codec can't encode character u'xe9' in position 11676: ordinal not in range(128)
surtout que u'xe9' est un simple é, qui ne devrait pas poser de problème à écrire dans un fichier.
s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
t = u.encode('utf-8', 'ignore')
Une idée ?
Bonsoir !
Je ne comprends pas ce TraceBack :
txt=contenu.encode('utf-8','ignore')
open(filename+".bak","wb").write(txt)
UnicodeEncodeError: 'ascii' codec can't encode character u'xe9' in position 11676: ordinal not in range(128)
surtout que u'xe9' est un simple é, qui ne devrait pas poser de problème à écrire dans un fichier.
s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
t = u.encode('utf-8', 'ignore')
Une idée ?
Comme on n'a pas le traceback, je suis bien obligé de poser la question:
c'est bien l'appel à file.write qui lève l'exception ??? Ou c'est pas
plutôt l'appel à contenu.encode ?s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
Comme on n'a pas le traceback, je suis bien obligé de poser la question:
c'est bien l'appel à file.write qui lève l'exception ??? Ou c'est pas
plutôt l'appel à contenu.encode ?
s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
Comme on n'a pas le traceback, je suis bien obligé de poser la question:
c'est bien l'appel à file.write qui lève l'exception ??? Ou c'est pas
plutôt l'appel à contenu.encode ?s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
Le 13/09/2010 11:25, Bruno Desthuilliers a écrit :s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
Moi qui pensais être enfin un peu au clair sur ces histoires
d'encodages, je m'aperçois que non.
Le 13/09/2010 11:25, Bruno Desthuilliers a écrit :
s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
Moi qui pensais être enfin un peu au clair sur ces histoires
d'encodages, je m'aperçois que non.
Le 13/09/2010 11:25, Bruno Desthuilliers a écrit :s = "ééé"
u = u"ééé"
t = s.encode('utf-8', 'ignore')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
Moi qui pensais être enfin un peu au clair sur ces histoires
d'encodages, je m'aperçois que non.
type('abc')
type(u'abc')
u = unicode('abc', 'cp1252')
s = u.encode('utf-8')
type(u)
type(s)
s = 'ax00bx00cx00xe9x00'
u = s.decode('utf-16-le')
type(s)
type(u)
repr(u)
s = 'abc'
s2 = s.encode('hex')
type(s)
type(s2)
s2
u'abcéz'.encode('ascii')
u'abcéz'.encode('ascii', 'ignore')
u'abcéz'.encode('ascii', 'replace')
'é'.encode('utf-8')
'é'.encode('utf-8', 'ignore')
'é'.encode('utf-8', 'replace')
'a'.encode('utf-8', 'replace')
'a'.encode('utf-8', 'ignore')
'a'.encode('utf-8')
repr('a'.encode('utf-16'))
repr('é'.encode('utf-16'))
type('abc')
type(b'abc')
'abc'.encode('utf-8')
'abc'.decode
b'abc'.decode('ascii')
b'abc'.encode
type('abc')
type(u'abc')
u = unicode('abc', 'cp1252')
s = u.encode('utf-8')
type(u)
type(s)
s = 'ax00bx00cx00xe9x00'
u = s.decode('utf-16-le')
type(s)
type(u)
repr(u)
s = 'abc'
s2 = s.encode('hex')
type(s)
type(s2)
s2
u'abcéz'.encode('ascii')
u'abcéz'.encode('ascii', 'ignore')
u'abcéz'.encode('ascii', 'replace')
'é'.encode('utf-8')
'é'.encode('utf-8', 'ignore')
'é'.encode('utf-8', 'replace')
'a'.encode('utf-8', 'replace')
'a'.encode('utf-8', 'ignore')
'a'.encode('utf-8')
repr('a'.encode('utf-16'))
repr('é'.encode('utf-16'))
type('abc')
type(b'abc')
'abc'.encode('utf-8')
'abc'.decode
b'abc'.decode('ascii')
b'abc'.encode
type('abc')
type(u'abc')
u = unicode('abc', 'cp1252')
s = u.encode('utf-8')
type(u)
type(s)
s = 'ax00bx00cx00xe9x00'
u = s.decode('utf-16-le')
type(s)
type(u)
repr(u)
s = 'abc'
s2 = s.encode('hex')
type(s)
type(s2)
s2
u'abcéz'.encode('ascii')
u'abcéz'.encode('ascii', 'ignore')
u'abcéz'.encode('ascii', 'replace')
'é'.encode('utf-8')
'é'.encode('utf-8', 'ignore')
'é'.encode('utf-8', 'replace')
'a'.encode('utf-8', 'replace')
'a'.encode('utf-8', 'ignore')
'a'.encode('utf-8')
repr('a'.encode('utf-16'))
repr('é'.encode('utf-16'))
type('abc')
type(b'abc')
'abc'.encode('utf-8')
'abc'.decode
b'abc'.decode('ascii')
b'abc'.encode
Moi qui pensais être enfin un peu au clair sur ces histoires
d'encodages, je m'aperçois que non.
Mais si, mais si !-)
La preuve : tu poses les bonnes question... auxquelles je n'ai aucune
réponse puisque je me pose exactement les mêmes (questions) :-/
Moi qui pensais être enfin un peu au clair sur ces histoires
d'encodages, je m'aperçois que non.
Mais si, mais si !-)
La preuve : tu poses les bonnes question... auxquelles je n'ai aucune
réponse puisque je me pose exactement les mêmes (questions) :-/
Moi qui pensais être enfin un peu au clair sur ces histoires
d'encodages, je m'aperçois que non.
Mais si, mais si !-)
La preuve : tu poses les bonnes question... auxquelles je n'ai aucune
réponse puisque je me pose exactement les mêmes (questions) :-/
Parmi les codecs disponibles, il en existes qui "transforment
des str en str".s = 'abc'
s2 = s.encode('hex')
type(s)
<type 'str'>type(s2)
<type 'str'>s2
616263
Dans les exemples suivants, une erreur est lévée non
pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16",
mais parce que un str ne peut être converti en unicode avec la
fct encode().
'é'.encode('utf-8')
Traceback (most recent call last):
File "<psi last command>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
position 0: ordinal not in range(128)
La gestion des "transcodages" se fait proprement.
Un type str ne peut être qu'en-codé et ne peut être dé-codé.
[...]
Inversément, un type bytes ne peut être que dé-codé et non en-codé.
Les codecs permettant une conversion de codage de type
bytes -> bytes ont disparus.
Sous réserve d'une grosse bourde de ma part, cela devrait
être correct.
Parmi les codecs disponibles, il en existes qui "transforment
des str en str".
s = 'abc'
s2 = s.encode('hex')
type(s)
<type 'str'>
type(s2)
<type 'str'>
s2
616263
Dans les exemples suivants, une erreur est lévée non
pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16",
mais parce que un str ne peut être converti en unicode avec la
fct encode().
'é'.encode('utf-8')
Traceback (most recent call last):
File "<psi last command>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
position 0: ordinal not in range(128)
La gestion des "transcodages" se fait proprement.
Un type str ne peut être qu'en-codé et ne peut être dé-codé.
[...]
Inversément, un type bytes ne peut être que dé-codé et non en-codé.
Les codecs permettant une conversion de codage de type
bytes -> bytes ont disparus.
Sous réserve d'une grosse bourde de ma part, cela devrait
être correct.
Parmi les codecs disponibles, il en existes qui "transforment
des str en str".s = 'abc'
s2 = s.encode('hex')
type(s)
<type 'str'>type(s2)
<type 'str'>s2
616263
Dans les exemples suivants, une erreur est lévée non
pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16",
mais parce que un str ne peut être converti en unicode avec la
fct encode().
'é'.encode('utf-8')
Traceback (most recent call last):
File "<psi last command>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
position 0: ordinal not in range(128)
La gestion des "transcodages" se fait proprement.
Un type str ne peut être qu'en-codé et ne peut être dé-codé.
[...]
Inversément, un type bytes ne peut être que dé-codé et non en-codé.
Les codecs permettant une conversion de codage de type
bytes -> bytes ont disparus.
Sous réserve d'une grosse bourde de ma part, cela devrait
être correct.
Le 14/09/2010 12:23, jmfauth a écrit :
> Dans les exemples suivants, une erreur est lévée non
> pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16",
> mais parce que un str ne peut être converti en unicode avec la
> fct encode().
Heu, pour convertir un str en unicode, c'est decode() plutôt, non ?
>>>> 'é'.encode('utf-8')
> Traceback (most recent call last):
> File "<psi last command>", line 1, in <module>
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
> position 0: ordinal not in range(128)
Cet exemple et le message d'erreur qui va avec me donnent l'impression qu e :
«'é'.encode('utf8')» équivaut à «'é'.decode('ascii').encode ('utf8')»
u = unicode('é', 'iso-8859-1')
s = u.encode('utf-8')
type(u), type(s), repr(s)
type(u), repr(u), type(s), repr(s)
Le 14/09/2010 12:23, jmfauth a écrit :
> Dans les exemples suivants, une erreur est lévée non
> pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16",
> mais parce que un str ne peut être converti en unicode avec la
> fct encode().
Heu, pour convertir un str en unicode, c'est decode() plutôt, non ?
>>>> 'é'.encode('utf-8')
> Traceback (most recent call last):
> File "<psi last command>", line 1, in <module>
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
> position 0: ordinal not in range(128)
Cet exemple et le message d'erreur qui va avec me donnent l'impression qu e :
«'é'.encode('utf8')» équivaut à «'é'.decode('ascii').encode ('utf8')»
u = unicode('é', 'iso-8859-1')
s = u.encode('utf-8')
type(u), type(s), repr(s)
type(u), repr(u), type(s), repr(s)
Le 14/09/2010 12:23, jmfauth a écrit :
> Dans les exemples suivants, une erreur est lévée non
> pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16",
> mais parce que un str ne peut être converti en unicode avec la
> fct encode().
Heu, pour convertir un str en unicode, c'est decode() plutôt, non ?
>>>> 'é'.encode('utf-8')
> Traceback (most recent call last):
> File "<psi last command>", line 1, in <module>
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
> position 0: ordinal not in range(128)
Cet exemple et le message d'erreur qui va avec me donnent l'impression qu e :
«'é'.encode('utf8')» équivaut à «'é'.decode('ascii').encode ('utf8')»
u = unicode('é', 'iso-8859-1')
s = u.encode('utf-8')
type(u), type(s), repr(s)
type(u), repr(u), type(s), repr(s)
On 14 sep, 20:46, Francois Lafont
wrote:
> Le 14/09/2010 12:23, jmfauth a écrit :
> > Dans les exemples suivants, une erreur est lévée non
> > pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16 ",
> > mais parce que un str ne peut être converti en unicode avec la
> > fct encode().
> >>>> 'é'.encode('utf-8')
> > Traceback (most recent call last):
> > File "<psi last command>", line 1, in <module>
> > UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
> > position 0: ordinal not in range(128)
> Cet exemple et le message d'erreur qui va avec me donnent l'impression que :
> «'é'.encode('utf8')» équivaut à «'é'.decode('ascii').enco de('utf8')»
C'est tout à fait cela. Avant d'encoder en 'utf-8', il faut d'abord
créer un unicode valide. Un «'é'.encode('utf8')» ne peut le faire
correctement que si "encode()" connaît le codage de "é", hors il
ne le connaît pas et assumme un codage 'ascii'.
L'équivalent précis est:
'é'.decode('ascii', 'strict').encode('utf-8')
La façon propre de travailler est de le faire en 2 étapes.
>>> u = unicode('é', 'iso-8859-1')
>>> s = u.encode('utf-8')
>>> type(u), type(s), repr(s)
(<type 'unicode'>, <type 'str'>, "'xc3xa9'")>>> type(u), repr(u), typ e(s), repr(s)
(<type 'unicode'>, "u'xe9'", <type 'str'>, "'xc3xa9'")
De toute façon, ce n'est pas très logique de vouloir
directement créer un "utf-8" à partir d'un str, car
seuls les unicodes ont des codages. En interne, En Python 2,
un str n'est pas un unicode, par contre en Python 3, ça l'est.
jmf
On 14 sep, 20:46, Francois Lafont <francois.laf...@nospam.invalid>
wrote:
> Le 14/09/2010 12:23, jmfauth a écrit :
> > Dans les exemples suivants, une erreur est lévée non
> > pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16 ",
> > mais parce que un str ne peut être converti en unicode avec la
> > fct encode().
> >>>> 'é'.encode('utf-8')
> > Traceback (most recent call last):
> > File "<psi last command>", line 1, in <module>
> > UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
> > position 0: ordinal not in range(128)
> Cet exemple et le message d'erreur qui va avec me donnent l'impression que :
> «'é'.encode('utf8')» équivaut à «'é'.decode('ascii').enco de('utf8')»
C'est tout à fait cela. Avant d'encoder en 'utf-8', il faut d'abord
créer un unicode valide. Un «'é'.encode('utf8')» ne peut le faire
correctement que si "encode()" connaît le codage de "é", hors il
ne le connaît pas et assumme un codage 'ascii'.
L'équivalent précis est:
'é'.decode('ascii', 'strict').encode('utf-8')
La façon propre de travailler est de le faire en 2 étapes.
>>> u = unicode('é', 'iso-8859-1')
>>> s = u.encode('utf-8')
>>> type(u), type(s), repr(s)
(<type 'unicode'>, <type 'str'>, "'\xc3\xa9'")>>> type(u), repr(u), typ e(s), repr(s)
(<type 'unicode'>, "u'\xe9'", <type 'str'>, "'\xc3\xa9'")
De toute façon, ce n'est pas très logique de vouloir
directement créer un "utf-8" à partir d'un str, car
seuls les unicodes ont des codages. En interne, En Python 2,
un str n'est pas un unicode, par contre en Python 3, ça l'est.
jmf
On 14 sep, 20:46, Francois Lafont
wrote:
> Le 14/09/2010 12:23, jmfauth a écrit :
> > Dans les exemples suivants, une erreur est lévée non
> > pas parce qu'un "é" ne puisse pas "être codé en utf-8 ou utf-16 ",
> > mais parce que un str ne peut être converti en unicode avec la
> > fct encode().
> >>>> 'é'.encode('utf-8')
> > Traceback (most recent call last):
> > File "<psi last command>", line 1, in <module>
> > UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in
> > position 0: ordinal not in range(128)
> Cet exemple et le message d'erreur qui va avec me donnent l'impression que :
> «'é'.encode('utf8')» équivaut à «'é'.decode('ascii').enco de('utf8')»
C'est tout à fait cela. Avant d'encoder en 'utf-8', il faut d'abord
créer un unicode valide. Un «'é'.encode('utf8')» ne peut le faire
correctement que si "encode()" connaît le codage de "é", hors il
ne le connaît pas et assumme un codage 'ascii'.
L'équivalent précis est:
'é'.decode('ascii', 'strict').encode('utf-8')
La façon propre de travailler est de le faire en 2 étapes.
>>> u = unicode('é', 'iso-8859-1')
>>> s = u.encode('utf-8')
>>> type(u), type(s), repr(s)
(<type 'unicode'>, <type 'str'>, "'xc3xa9'")>>> type(u), repr(u), typ e(s), repr(s)
(<type 'unicode'>, "u'xe9'", <type 'str'>, "'xc3xa9'")
De toute façon, ce n'est pas très logique de vouloir
directement créer un "utf-8" à partir d'un str, car
seuls les unicodes ont des codages. En interne, En Python 2,
un str n'est pas un unicode, par contre en Python 3, ça l'est.
jmf