Unicode Encode Error en ecriture fichier txt
Bonjour,
Après une lecture du ping suivant la fonction ci dessous, la variable "reponse" lors de l'écriture dans fichier txt, j'ai l'erreur suivante :
Auriez-vous la solution car en python 3.4 cela fonctionne et je suis retourner en version 2.7 à cause de souci de compilation.
merci
cordialement
Erreur produite
Code:
1 2
|
Unicode Encode Error: 'ascii' codec can't encode character u'\xae' in position 18: ordinal not in range(128) |
affichage en console correcte
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Envoi d'une requête 'Ping' 192.168.0.13 avec 32 octets de données*:
Réponse de 192.168.0.13*: octets=32 temps<1ms TTL=128
Réponse de 192.168.0.13*: octets=32 temps<1ms TTL=128
Réponse de 192.168.0.13*: octets=32 temps<1ms TTL=128
Réponse de 192.168.0.13*: octets=32 temps<1ms TTL=128
Statistiques Ping pour 192.168.0.13:
Paquets*: envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms |
Pour voir pourquoi, j'ai placé la variable dans un tableau pour voir ce quelle donne
Code:
1 2 3
|
[u"\r\nEnvoi d'une requ\xeate 'Ping' 192.168.0.13 avec 32 octets de donn\xe9es\xa0:\r\nR\xe9ponse de 192.168.0.13\xa0: octets=32 temps<1ms TTL=128\r\nR\xe9ponse de 192.168.0.13\xa0: octets=32 temps<1ms TTL=128\r\nR\xe9ponse de 192.168.0.13\xa0: octets=32 temps<1ms TTL=128\r\nR\xe9ponse de 192.168.0.13\xa0: octets=32 temps<1ms TTL=128\r\n\r\nStatistiques Ping pour 192.168.0.13:\r\n Paquets\xa0: envoy\xe9s = 4, re\xe7us = 4, perdus = 0 (perte 0%),\r\nDur\xe9e approximative des boucles en millisecondes :\r\n Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms\r\n"]
0 |
Partie du code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#! /usr/bin/python
#_*_ coding:utf-8 _*_
# Python 2.7.7
# ------------------------------------------
# Analyse de ping
# ------------------------------------------
def analyse_ping():
import socket,subprocess,os,sys
ip = socket.gethostbyname(socket.gethostname())
encodage="cp850"
# envoie un ping à l'ordinateur d'adresse ip, et retourne la réponse sous forme d'une liste de lignes unicode """
commande = ["ping ", ip]
try:
os.system('echo Analyse en cours...')
out, _ = subprocess.Popen(commande, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False).communicate()
except (ValueError, OSError) as err:
return ("Erreur: %s" % (err.args[0],)).decode(encodage)
reponse = out.decode(encodage)
# importe le résultat dans fichier txt
with open('ping.txt', 'w') as fichier:
fichier.write(reponse)
txtping.close() |