IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

probleme de coding


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Par défaut probleme de coding
    Bonjour
    Je voudrais enregistrer le contenu d'un TEXT avec des caractère japonais,
    et j'ai le message suivant :

    fichier.write(recup_text_doc)
    File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode characters in position 50-53: character maps to <undefined>

    comment enregistrer cette phrase ("Style de bonsaï aussi appelé 'Bosquet'(ou Yosé-ué 寄せ植え en japonais)"
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    from tkinter import ttk
    from tkinter import *
    fenetre=Tk()
    fenetre.title("BONSAI")
    fenetre.geometry("1257x700+10+10")
     
     
    Frame1 = Frame(fenetre)# date
    Frame1.grid(row=1, column=0,padx=5,pady=0 )
     
    phrase ="Style de bonsaï aussi appelé 'Bosquet'(ou Yosé-ué 寄せ植え en japonais)"
     
     
     
    def enregistrement():
         recup_text_doc = E_Observation.get(1.0,END+'-1c')
         with open('justine.txt','w',)as fichier:
                    fichier.write(recup_text_doc)
     
    E_Observation = Text(Frame1,height=10,relief=RIDGE,
            width=80,bg="yellow",fg='red',
            font=("arial",12,"bold italic"))
    E_Observation.grid(row=0,column=0,pady=5,padx=5)
    E_Observation.insert(END,phrase)
     
    bt_enregistrer=Button(Frame1,text="Enregistrer",state=NORMAL,fg='yellow',
            command = enregistrement,bg="green3" ,font=("arial",14,"bold italic") )        
    bt_enregistrer.grid(row=1,column=0,padx=5,pady=10)
    problele

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    A priori, en utf-8... en tout cas, l'encoding par défaut (cp1252) n'est pas adapté.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Par défaut utf-8
    Merci pour votre réponse.
    Je suis en UTF-8 au début du script
    Le bloc note devrait prendre en UNICODE.
    Mais je ne trouve pas.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par triplebi Voir le message
    Je suis en UTF-8 au début du script
    Le coding:utf-8 au début du script dit juste que le script (qui est un fichier texte) est codé en utf-8. Après les fichiers que le fichier lira ou écrira, c'est selon.

    D'ailleurs vous pouvez voir dans le message d''erreur qu'il essaie d'encoder ce qu'il récupère du widget en CP1252 pour l'écrire dans le fichier: l'instruction qui plante est fichier.write(recup_text_doc).

    Citation Envoyé par triplebi Voir le message
    Mais je ne trouve pas.
    Pour comprendre la solution, il faut déjà comprendre le problème...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    C'est là que ça se joue sur l'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open('justine.txt','w',)
    et tu as la même chose en read ?
    C'est quoi, recup_texte ?
    Les open doivent préciser l'encodage, j'imagine.

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Pour construire une phrase incluant des caractères japonais, j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    phrase = "Style de bonsaï aussi appelé 'Bosquet'(ou Yosé-ué " + chr(
        23492) + chr(12379) + chr(26893) + chr(12360) + " en japonais)"
     
    print(phrase)
     
    # Style de bonsaï aussi appelé 'Bosquet'(ou Yosé-ué 寄せ植え en japonais)

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre averti
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Par défaut probleme persistant
    si je veux enregistrer cette phrase dans fichier.txt
    J'ai ce message erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    phrase = "Style de bonsaï aussi appelé 'Bosquet'(ou Yosé-ué " + chr(
        23492) + chr(12379) + chr(26893) + chr(12360) + " en japonais)"
    erreur detecté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichier.write(phrase)
      File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode characters in position 50-53: character maps to <undefined>

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par triplebi Voir le message
    si je veux enregistrer cette phrase dans fichier.txt
    J'ai ce message erreur
    Vous n'avez pas fait grand chose pour le comprendre!
    Lancez la console Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> s = phrase = "Style de bonsaï aussi appelé 'Bosquet'(ou Yosé-ué " + chr(
    ... 23492) + chr(12379) + chr(26893) + chr(12360) + " en japonais)"
    >>> f = open('test.dat', 'w')
    >>> f.write(s)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\py_env\py64_38\lib\encodings\cp1252.py", line 19, in encode
        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode characters in position 50-53: c
    haracter maps to <undefined>
    >>>
    Je suis content, je reproduis le même problème.

    Et je me dis "ah ben m.... alors l'encoding par défaut est cp1252, essayons utf-8":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> f = open('test.dat', 'w', encoding='utf-8')
    >>> f.write(s)
    67
    De suite çà marche mieux...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre averti
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Par défaut toujours un soucis
    Quand j'enregistre la phrase, je n'ai plus de message d'erreur, mais
    j'ouvre le fichier txt, voici le résultat :

    les quatre lettres en japonnais sont représentés par des carrés

    maintenant, je copie la phrase du fichier texte dans le text du tkinter, en mettant aussi encoding='UTF-8)
    et voila le résultat

    Style de bonsaï aussi appelé 'Bosquet'(ou Yosé-ué 寄せ植え en japonais)

    Merci beaucoup à TOUS

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par triplebi Voir le message
    Quand j'enregistre la phrase, je n'ai plus de message d'erreur, mais
    j'ouvre le fichier txt, voici le résultat :

    les quatre lettres en japonnais sont représentés par des carrés
    L'affichage d'un caractère, c'est prendre son numéro/index (par exemple 23492) et afficher le dessin correspondant. S'il n'y en a pas, c'est un patatoïde... qui dépendra de l'encoding et de la police de caractères utilisée par la console/terminal.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre averti
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Par défaut message
    Merci Wiztricks pour ton explication sur le coding-utf-8 au début du fichier.py
    Merci pour ton explication sur les caractères d'un fichier.txt
    J'ai beaucoup appris

  12. #12
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si tu utilisais python 3 tu n'aurais pas rencontré ce problème.

  13. #13
    Membre averti
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Par défaut reponse python3
    salut
    Je suis en python 3.4

  14. #14
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Si tu utilisais python 3 tu n'aurais pas rencontré ce problème.
    non
    encoding est le nom de l'encodage utilisé pour encoder ou décoder le fichier. Il doit seulement être utilisé en mode texte. L'encodage par défaut dépend de la plateforme (ce que locale.getpreferredencoding() donne), mais n'importe quel text encoding supporté par Python peut être utilisé. Voir codecs pour une liste des encodages supportés.
    open

    Renvoie le codage utilisé pour les données textuelles, selon les préférences de l'utilisateur. Les préférences de l'utilisateur sont exprimées différemment selon les systèmes et peuvent ne pas être disponibles via les interfaces de programmation sur certains systèmes. Cette fonction ne renvoie donc qu'une supposition.

    Sur certains systèmes, il est nécessaire d'invoquer setlocale() pour obtenir les préférences de l'utilisateur, cette fonction n'est donc pas utilisable sans protection dans les programmes à fils d'exécutions multiples. Si l'appel de setlocale n'est pas nécessaire ou souhaité, do_setlocale doit être réglé à False.

    Sur Android ou dans le mode UTF-8 (avec l'option -X utf8), renvoie toujours 'UTF-8', la locale et l'argument do_setlocale sont ignorés.

    Modifié dans la version 3.7: La fonction renvoie maintenant toujours UTF-8 sur Android ou si le mode UTF-8 est activé.
    locale.getpreferredencoding


    sur une machine tournant sous W10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license()" for more information.
    >>> import locale
    >>> locale.getpreferredencoding()
    'cp1252'
    alors que sur une machine tournant sous debian
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Linux debian 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64
     
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
     
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    Last login: Sun Apr 26 00:15:54 2020
    root@debian:~# python3
    Python 3.7.3 (default, Dec 20 2019, 18:57:59)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import locale
    >>> locale.get
    locale.getdefaultlocale(      locale.getpreferredencoding(
    locale.getlocale(             locale.gettext(
    >>> locale.getpreferredencoding()
    'UTF-8'

  15. #15
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ben oui, mais le code initial commence par #!/usr/bin/env python

  16. #16
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Le shebang ne pose aucun problème sur windows (encore heureux vu que c'est une notion Unix) et bien souvent il est juste issue d'un copié collé ou de certain IDE qui n'ont toujours pas compris que le shebang était .. non pas inutile je dirais pour ne froisser personne mais dépassé, le contexte d’exécution / d'environnent n'a rien à faire dans le programme même.
    Quitte à utiliser un shebang autant mettre #! python ou #! python3.X.Y.

    En d'autre terme il n'est absoluement pas viable de tirer des conclusions quand à la plateforme utilisé via le shebang.


    Tout comme # -*- coding: utf-8 -*- qui vient des IDE comme Emacs (comme si c'était aux langages & conventions de s'adapter aux IDE ...) alors que d'après la PEP263 il suffit juste que ça match le pattern ^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+) et que se soit dans les deux premières lignes. donc un simple # coding: utf-8 est tout à faire valide... mais là je divague

  17. #17
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Ben oui, mais le code initial commence par #!/usr/bin/env python
    Il y a aussi un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichier.write(recup_text_doc)
    File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode characters in position 50-53: character maps to <undefined>
    qui laisse supposer qu'on est sur Windows, Python 3.4 et que l'encoding utilisé est cp1252.

    Après, on arrive (ou pas) à reconstruire la scène du crime avec ces éléments épars pour formuler un diagnostic qu'on va essayer de corroborer en croisant le tout avec son expérience de Python sur Windows...

    On peut se planter parce qu'on n'y a pas intégré le petit détail qui fout tout par terre, mais s'arrêter à la première ligne pour conclure "c'est parce que Python 2", c'est juste parce qu'on a une poutre dans l'oeil.... ou qu'on n'a pas envie de chercher un peu.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. probleme de code
    Par fixouille90 dans le forum Access
    Réponses: 11
    Dernier message: 09/12/2005, 15h23
  2. probleme de code simple
    Par BFH dans le forum C
    Réponses: 18
    Dernier message: 28/10/2005, 18h57
  3. [VB.Net] Probleme popup code behind
    Par balibo dans le forum ASP.NET
    Réponses: 19
    Dernier message: 17/10/2005, 12h22
  4. probleme de code formulaire
    Par bachilbouzouk dans le forum ASP
    Réponses: 45
    Dernier message: 13/04/2005, 10h01
  5. [debutant] probleme de code :-(
    Par flogreg dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 16/08/2004, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo