Problème encoding dans Windows mais pas dans IDLE

Le problème exposé dans ce sujet a été résolu.

Salut à tous,

J’ai voulu me faire une version du générateur de texte par chaine de Markov du poste (https://zestedesavoir.com/forums/sujet/5039/janvier-2016-generation-automatique-de-texte/?page=1 ) et j’ai réussi à arriver à un résultat qui me satisfait .

Cependant j’ai un "bug" très bizzare : mon script marche parfaitement quand je l’ouvre avec IDLE mais quand j’execute le fichier .py j’ai une erreur :File "C:\Python34\lib\encodings\cp850.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_map)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\u2019' in position 30: character maps to <undefined>

Ci dessous mon script Python:

 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
# coding: utf-8
import markovify
import os


# Get raw text as string.
with open("corpus.txt", encoding="utf-8") as f:
    text = f.read()

# Build the model.
text_model = markovify.Text(text)

print("Bienvenue .")
nb_para=1
nb_para=int(input("Combien voulez-vous de paragraphe ? : "))


# Print five randomly-generated sentences
for i in range(nb_para):
    print(text_model.make_sentence())
    print(text_model.make_sentence())
    print(text_model.make_sentence())
    print(text_model.make_sentence())
    print(text_model.make_sentence())
    print("\n")
# Print three randomly-generated sentences of no more than 140 characters
# for i in range(3):
    # print(text_model.make_short_sentence(140))
os.system("pause")

Ca me semble être un problème d’encoding mais puisque j’ai spécifié l’encoding (UTF-8) je ne comprend pas bien le souci :s

Merci par avance à ceux qui pourront m’aider et bonne journée :)

+0 -0

C’est pas forcément au fichier texte que je pensais, mais à ton script Python lui-même, bien que je ne vois de caractères spéciaux dans ton code.

L’erreur que tu cites ne permet pas d’identifier à quel moment elle se produit. N’as-tu pas un traceback plus complet ?

Je me demande aussi si l’erreur ne pourrait pas venir d’input, et donc de l’encodage de sys.stdin.

L’erreur se produit lorsque le script doit afficher le résultat du générateur de faux texte qui contient des accents (vu qu’en Francais) . Par contre la première étape (demander combien de paragraphe) fonctionne nickel

EDIT : pour info j’ai tenté de rajouter un .encode("utf-8") a tous mes print pour voir si ça résous le problème mais non ca ne marche pas si ca peut aider quelqu’un à trouver le souci :s Pour le fichier Python oui il est bien en UTF-8 sans BOM aussi :)

+0 -0

Bonjour,

C’est peut-être pas ça mais ça vaut le coup de creuser…

Ca me rappel un problème que j’ai eu récemment avec un fichier dont on me certifiait l’encodage mais qui ne passait pas la lecture: \u2019 correspond à une apostrophe, vérifie le contenu de ton corpus.txt si il ne contient pas des apostrophes un peu bizarres ( ’ <> ‘ <> ̛ <> ’ …)

Attention à la vérification de l’encodage avec Notepad++, j’ai l’impression qu’il ne fait que déduire l’encodage en fonction de qu’il trouve dans le fichier, surtout un fichier texte brut où l’encodage n’est pas indiqué puisqu’il n’existe pas d’en-tête dans un fichier texte brut…

Si tu as un doute sur un caractère il y’a un éditeur PSPad qui affiche le code du caractère sélectionné.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte