Dans un programme en python j'utilise des commandes Unix avec popen (je
suis obligé de faire ainsi car je lance les commandes à distance avec
ssh, les machines n'ayant pas python) .
Sur certaines machines j'ai des messages d'erreurs à cause de mon
interface en PyGTK qui utilise UTF8.
J'essaye donc de convertir le resultat de mes commandes en UTF8
mais ....
info = os.popen("ls -la")
text = info.read()
text.encode('utf8')
buffer = self.textview1.get_buffer()
buffer.set_text(text)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93:
invalid data
J'ai lancé cette commande directement sur une machine qui me pose probleme.
Comme forcer la conversion en UTF8 ?
Merci d'avance
--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To: abuse@webatou.net
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Encolpe DEGOUTE
Dans fr.comp.lang.python, Frederic-B écrivit:
Bonjour,
Dans un programme en python j'utilise des commandes Unix avec popen (je suis obligé de faire ainsi car je lance les commandes à distance avec ssh, les machines n'ayant pas python) .
Sur certaines machines j'ai des messages d'erreurs à cause de mon interface en PyGTK qui utilise UTF8.
J'essaye donc de convertir le resultat de mes commandes en UTF8 mais ....
info = os.popen("ls -la") text = info.read() text.encode('utf8') buffer = self.textview1.get_buffer() buffer.set_text(text)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93: invalid data
J'ai lancé cette commande directement sur une machine qui me pose probleme.
Comme forcer la conversion en UTF8 ?
text.encode('utf8', 'ignore') ou cet exemple d'interaction avec le système: word = self.entry.get_text () os.environ['WORD'] = word.encode('iso-8859-15', 'ignore') words = os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode l9..u8').read ()
-- Encolpe DEGOUTE http://colpi.info Logiciels libres, hockey sur glace et autres activités cérébrales
Dans fr.comp.lang.python, Frederic-B écrivit:
Bonjour,
Dans un programme en python j'utilise des commandes Unix avec popen (je
suis obligé de faire ainsi car je lance les commandes à distance avec
ssh, les machines n'ayant pas python) .
Sur certaines machines j'ai des messages d'erreurs à cause de mon
interface en PyGTK qui utilise UTF8.
J'essaye donc de convertir le resultat de mes commandes en UTF8
mais ....
info = os.popen("ls -la")
text = info.read()
text.encode('utf8')
buffer = self.textview1.get_buffer()
buffer.set_text(text)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93:
invalid data
J'ai lancé cette commande directement sur une machine qui me pose probleme.
Comme forcer la conversion en UTF8 ?
text.encode('utf8', 'ignore')
ou cet exemple d'interaction avec le système:
word = self.entry.get_text ()
os.environ['WORD'] = word.encode('iso-8859-15', 'ignore')
words = os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode l9..u8').read ()
--
Encolpe DEGOUTE
http://colpi.info
Logiciels libres, hockey sur glace et autres activités cérébrales
Dans un programme en python j'utilise des commandes Unix avec popen (je suis obligé de faire ainsi car je lance les commandes à distance avec ssh, les machines n'ayant pas python) .
Sur certaines machines j'ai des messages d'erreurs à cause de mon interface en PyGTK qui utilise UTF8.
J'essaye donc de convertir le resultat de mes commandes en UTF8 mais ....
info = os.popen("ls -la") text = info.read() text.encode('utf8') buffer = self.textview1.get_buffer() buffer.set_text(text)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93: invalid data
J'ai lancé cette commande directement sur une machine qui me pose probleme.
Comme forcer la conversion en UTF8 ?
text.encode('utf8', 'ignore') ou cet exemple d'interaction avec le système: word = self.entry.get_text () os.environ['WORD'] = word.encode('iso-8859-15', 'ignore') words = os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode l9..u8').read ()
-- Encolpe DEGOUTE http://colpi.info Logiciels libres, hockey sur glace et autres activités cérébrales
pasdespam-stealth
Encolpe DEGOUTE wrote:
Comme forcer la conversion en UTF8 ?
text.encode('utf8', 'ignore') ou cet exemple d'interaction avec le système: word = self.entry.get_text () os.environ['WORD'] = word.encode('iso-8859-15', 'ignore') words = os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode l9..u8').read ()
Bonjour et merci,
Mais malheuresement ....
line 429, in erase text.encode('utf8','ignore') UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93: invalid d ata
Est-il possible de passer outre les caracteres invalides ?
-- Posté via http://www.webatou.net/ Usenet dans votre navigateur ! Complaints-To:
Encolpe DEGOUTE wrote:
Comme forcer la conversion en UTF8 ?
text.encode('utf8', 'ignore')
ou cet exemple d'interaction avec le système:
word = self.entry.get_text ()
os.environ['WORD'] = word.encode('iso-8859-15', 'ignore')
words = os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode
l9..u8').read ()
Bonjour et merci,
Mais malheuresement ....
line 429, in erase
text.encode('utf8','ignore')
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93:
invalid d ata
Est-il possible de passer outre les caracteres invalides ?
--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To: abuse@webatou.net
text.encode('utf8', 'ignore') ou cet exemple d'interaction avec le système: word = self.entry.get_text () os.environ['WORD'] = word.encode('iso-8859-15', 'ignore') words = os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode l9..u8').read ()
Bonjour et merci,
Mais malheuresement ....
line 429, in erase text.encode('utf8','ignore') UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93: invalid d ata
Est-il possible de passer outre les caracteres invalides ?
-- Posté via http://www.webatou.net/ Usenet dans votre navigateur ! Complaints-To:
Sylvain Thenault
On Fri, 09 Jul 2004 06:58:59 +0000, Frederic-B wrote:
Encolpe DEGOUTE wrote:
Comme forcer la conversion en UTF8 ?
text.encode('utf8', 'ignore') ou cet exemple d'interaction avec le système: word >> self.entry.get_text () os.environ['WORD'] = word.encode('iso-8859-15', 'ignore') words >> os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode l9..u8').read ()
Bonjour et merci,
Mais malheuresement ....
line 429, in erase text.encode('utf8','ignore') UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93: invalid d ata
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError, et non UnicodeEncodeError). ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on commence à donner la politique 'ignore' à la méthode encode, ça montre généralement problème. Le seul cas acceptable, c'est quand on ne connait pas l'encodage de la chaine de départ, ce qui n'est pas ton cas ici)
On Fri, 09 Jul 2004 06:58:59 +0000, Frederic-B wrote:
Encolpe DEGOUTE wrote:
Comme forcer la conversion en UTF8 ?
text.encode('utf8', 'ignore')
ou cet exemple d'interaction avec le système: word >> self.entry.get_text ()
os.environ['WORD'] = word.encode('iso-8859-15', 'ignore') words >> os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode
l9..u8').read ()
Bonjour et merci,
Mais malheuresement ....
line 429, in erase
text.encode('utf8','ignore')
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93:
invalid d ata
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé
en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en
objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se
passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError,
et non UnicodeEncodeError).
ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on
commence à donner la politique 'ignore' à la méthode encode, ça montre
généralement problème. Le seul cas acceptable, c'est quand on ne
connait pas l'encodage de la chaine de départ, ce qui n'est pas ton cas
ici)
On Fri, 09 Jul 2004 06:58:59 +0000, Frederic-B wrote:
Encolpe DEGOUTE wrote:
Comme forcer la conversion en UTF8 ?
text.encode('utf8', 'ignore') ou cet exemple d'interaction avec le système: word >> self.entry.get_text () os.environ['WORD'] = word.encode('iso-8859-15', 'ignore') words >> os.popen ('grep "^${WORD}$" /usr/share/dict/words | recode l9..u8').read ()
Bonjour et merci,
Mais malheuresement ....
line 429, in erase text.encode('utf8','ignore') UnicodeDecodeError: 'utf8' codec can't decode bytes in position 91-93: invalid d ata
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError, et non UnicodeEncodeError). ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on commence à donner la politique 'ignore' à la méthode encode, ça montre généralement problème. Le seul cas acceptable, c'est quand on ne connait pas l'encodage de la chaine de départ, ce qui n'est pas ton cas ici)
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError, et non UnicodeEncodeError). ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on commence à donner la politique 'ignore' à la méthode encode, ça montre généralement problème. Le seul cas acceptable, c'est quand on ne connait pas l'encodage de la chaine de départ, ce qui n'est pas ton cas ici)
Ok merci ça fonctionne parfaitement, mais juste une petite question, si j'execute ma commande sur differentes machines je risque de tomber sur des cas qui n'utilise pas latin-1, dans cette situation que se passera-t-il ?
-- Posté via http://www.webatou.net/ Usenet dans votre navigateur ! Complaints-To:
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé
en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en
objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se
passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError,
et non UnicodeEncodeError).
ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on
commence à donner la politique 'ignore' à la méthode encode, ça montre
généralement problème. Le seul cas acceptable, c'est quand on ne
connait pas l'encodage de la chaine de départ, ce qui n'est pas ton cas
ici)
Ok merci ça fonctionne parfaitement, mais juste une petite question, si
j'execute ma commande sur differentes machines je risque de tomber sur des
cas qui n'utilise
pas latin-1, dans cette situation que se passera-t-il ?
--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To: abuse@webatou.net
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError, et non UnicodeEncodeError). ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on commence à donner la politique 'ignore' à la méthode encode, ça montre généralement problème. Le seul cas acceptable, c'est quand on ne connait pas l'encodage de la chaine de départ, ce qui n'est pas ton cas ici)
Ok merci ça fonctionne parfaitement, mais juste une petite question, si j'execute ma commande sur differentes machines je risque de tomber sur des cas qui n'utilise pas latin-1, dans cette situation que se passera-t-il ?
-- Posté via http://www.webatou.net/ Usenet dans votre navigateur ! Complaints-To:
Sylvain Thenault
On Fri, 09 Jul 2004 11:55:09 +0000, Frederic-B wrote:
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError, et non UnicodeEncodeError). ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on commence à donner la politique 'ignore' à la méthode encode, ça montre généralement problème. Le seul cas acceptable, c'est quand on ne connait pas l'encodage de la chaine de départ, ce qui n'est pas ton cas ici)
Ok merci ça fonctionne parfaitement, mais juste une petite question, si j'execute ma commande sur differentes machines je risque de tomber sur des cas qui n'utilise pas latin-1, dans cette situation que se passera-t-il ?
beh y a toutes les chances que ça plante si tu récupères une sortie en utf-8 par exemple plutot que latin1. Dans ce cas tu peux donner en plus la chaine 'ignore' ou 'replace' à la fonction unicode (tu dois aussi pouvoir lancer ta commande avec un 'LC_ALL=fr' devant pour être sur de récupérer de l'iso-8859-1, je pense que ça devrait le faire.
On Fri, 09 Jul 2004 11:55:09 +0000, Frederic-B wrote:
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé
en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en
objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se
passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError,
et non UnicodeEncodeError).
ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on
commence à donner la politique 'ignore' à la méthode encode, ça
montre généralement problème. Le seul cas acceptable, c'est quand on
ne connait pas l'encodage de la chaine de départ, ce qui n'est pas ton
cas ici)
Ok merci ça fonctionne parfaitement, mais juste une petite question, si
j'execute ma commande sur differentes machines je risque de tomber sur des
cas qui n'utilise
pas latin-1, dans cette situation que se passera-t-il ?
beh y a toutes les chances que ça plante si tu récupères une sortie en
utf-8 par exemple plutot que latin1. Dans ce cas tu peux donner en plus la
chaine 'ignore' ou 'replace' à la fonction unicode (tu dois aussi pouvoir
lancer ta commande avec un 'LC_ALL=fr' devant pour être sur de
récupérer de l'iso-8859-1, je pense que ça devrait le faire.
On Fri, 09 Jul 2004 11:55:09 +0000, Frederic-B wrote:
ton problème c'est que tu essaies d'encoder en UTF-8 une chaine encodé en latin-1. Python essaie donc d'abord de passer ta chaine latin1 en objet unicode en utilisant l'encodage par défaut, ascii. L'erreur se passe donc avant l'encodage en UTF-8 (d'où l'erreur UnicodeDecodeError, et non UnicodeEncodeError). ça devrait aller mieux si tu fais :
text = unicode(text, 'ISO-8859-1').encode('UTF-8')
et hop ! comme ça tu perd même pas les accents (pour moi quand on commence à donner la politique 'ignore' à la méthode encode, ça montre généralement problème. Le seul cas acceptable, c'est quand on ne connait pas l'encodage de la chaine de départ, ce qui n'est pas ton cas ici)
Ok merci ça fonctionne parfaitement, mais juste une petite question, si j'execute ma commande sur differentes machines je risque de tomber sur des cas qui n'utilise pas latin-1, dans cette situation que se passera-t-il ?
beh y a toutes les chances que ça plante si tu récupères une sortie en utf-8 par exemple plutot que latin1. Dans ce cas tu peux donner en plus la chaine 'ignore' ou 'replace' à la fonction unicode (tu dois aussi pouvoir lancer ta commande avec un 'LC_ALL=fr' devant pour être sur de récupérer de l'iso-8859-1, je pense que ça devrait le faire.