Forum Clubic

[Python] Probleme ASCII UTF8 ? - A mon avis, le pb vient du jeu de caract

EDIT: Désolé pour mon post en double, mais la premiere fois le serveur de clubic m’a renvoyé une errreur mysql.
Comment est ce que je peux effacer mon post?

Bonjour tout le monde

J’ai installé un petit script python sur mon amarok qui me permet de convertir les chansons qui sont dans la liste de lecture en mp3, en ogg etc…

Mais malheuresement, ce script plante des que j’ai des accents dans mes noms de fichiers :frowning:

J’ai essayé de contacter l’auteur du script mais je n’ai pas eut de reponse.

Je vous donne le log quand le script plante:

OggDec 1.0.1
ERROR: Failed to open input file: No such file or directory
Traceback (most recent call last):
  File "/home/atlas/.kde/share/apps/amarok/scripts/formatconverter.amarokscript/formatconverter.py", line 274, in ?
    mainEncodeLoop(outputFormat, destination, fileNameConven, dom_plist, options, checkOverwrite, checkInEqOut, transSkip, neverOver, FIELDS, INPUT, error_log)
  File "/home/atlas/.kde/share/apps/amarok/scripts/formatconverter.amarokscript/formatconverter.py", line 256, in mainEncodeLoop
    doTranscode(infoPopup, decodeCommand, encodeCommand, rmWavCommand, transSkip)
  File "/home/atlas/.kde/share/apps/amarok/scripts/formatconverter.amarokscript/formatconverter.py", line 200, in doTranscode
    os.system(encodeCommand)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 43: ordinal not in range(128)

Et voici le script en question:
EDIT: je ne peux pas vous faire un copier coller du script sinon lorsque j’ajoute mon poste sur clubic, la requete d’insertion du forum plante…
Vous pouvez le voir ici: le script

Malheuresement je ne connais pas du tout ce langage la…
J’ai quand meme bien sur un peu chercher… mais en vain…
Pourtant la 2eme ligne du script me fait croire qu’il utilise de l’utf8 mais pkoi il plante en me parlant d’ascii alors?

Merci a vous de m’avoir lu

Bonne journée!

A T L A S

:hello: Je me suis permis d’effacer l’autre post. Bonne recherche.

merci!

Le utf-8 à la 2éme ligne veut juste dire que le script est écrit en utf-8, ce n’est pas le codage des données qui y seront traitées.

Tu est sûr que tu a une version récente de Python? 2.4
>python -v

Tu peut vérifier l’encodage des caractéres utilisé par l’interpréteur Python :
>python
>>>import locale
>>>locale.getdefaultlocale(locale.LC_ALL)

Si l’interpréteur Python est déjà en francais je ne vois pas d’où viens le probléme, mais logiquement il est en ascii. Tu peut tester, toujours dans l’interpréteur python:
>>>locale.setlocale(locale.LC_ALL, ‘fr’)

Si fr te donne un message d’erreur (je crois que c’est dépendant du systéme) tu peut essayer un autre type parmi la liste des “locale_alias” dans http://svn.python.org/view/python/branches…573&view=markup

Si ca marche, il ne reste plus qu’a l’integrer dans le script


from xml.dom import minidom

import locale
locale.setlocale(locale.LC_ALL, 'fr')

title = ""

J’espére que ca va marcher. Les systémes de localisation, quand ca s’emméle, c’est un truc a devenir :pt1cable:

Merci de vos reponses.

J’ai essayé ce que tu m’as dis: j’ai une version 2.3.5. C’est pas si vieux que ca je pense. J’ai installé la 2.4 mais je pense qu’amarok se sert encore de la 2.3.5 (vu que quand le script marchera, ca sera amarok qui lancera le script…).

j’ai quand meme essayé de voir. Voila ce que ca me donne:

Python 2.3.5 (#2, Sep  4 2005, 22:01:42)
[GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getdefaultlocale(locale.LC_ALL)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.3/locale.py", line 340, in getdefaultlocale
    for variable in envvars:
TypeError: iteration over non-sequence

Je pense que j’ai surrement in pb de variable d’environement?
je n’ai aucune langue specifié?
j’ai quand meme essayé ceci au cas ou…

locale.setlocale(locale.LC_ALL,'c-french')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.3/locale.py", line 381, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

A la place de c-french j’ai bien sur essayé fr etc… mais rien n’y fait.
J’avous n’y rien comprendre du tout…

j’ai quand meme chercher a l’aide de google des reponses mais en vain :??:

Merci et bonne journée

Oula! Il est bizzar ton Python! Normalement il doit savoir en quel language est ton systéme…
ET en plus la variable d’environnement qui pointe vers l’interpreteur Python est restée sur la 2.3 :confused:

Pour être sûr:
Tu a bien fait le test aprés avoir installé la 2.4?
Est ce que tu a fait un test avant l’installation, avec la 2.3?
Tu les a installé comment? la 2.4 et la 2.3

AmaroK n’utilise pas la 2.3. Il se contente d’appeler le script et c’est la premiére ligne du script “#!/usr/bin/env python” qui est lu par le systéme pour savoir quelle interpréteur/shell il doit utiliser.

Faut que tu ailles dans le répértoire python2.4 (surement /usr/local/lib/python2.4) et tu refait le test dans ce répértoire “./python” (n’oublie pas le “./” ca force le shell a réster dans le répértoire courant)

Si ca marche, tu change la premiere ligne du script “#!/CheminDeLa2.4/python” et tu n’a plus besoin du “locale…” dans le script.

Sinon … la suite au prochaine épisode :smiley:

Ha ok, ça marche donc comme ca: il se sert d’une variable d’environnement pour savoir quel version lancer… Enfin, quel fichier lancer plûtot… Ok

Alors en fait j’ai fais le test avec ma version actuelle (la 2.3) et je l’ai refait après avoir installé la 2.4. Mais ca m’a donné la même chose forcément vu que, comme tu l’as dit, la variable d’environement pointe tj sur la version 2.3

Comment je les ai installé?
La 2.3, c’est celle d’origine que j’ai eut lorsque j’ai installé ma debian.
Et la 2.4 je l’ai tout simplement installé en utilisant l’apt-get. C’est pour ça que je trouve bizarre qu’il n’ait pas changé lui-meme la variable d’environement.

J’ai voulu désinstaller la 2.3, mais il allait devoir me désinstaller un grand nombre d’autre paquet (dont amarok…) alors je ne l’ai pas fait.

Ok merci, je vais essayé des que j’arrive chez moi et je donne un feedback :slight_smile:

Merci bcp en tout cas, ca m’aide drolement.

Bon en fait je me suis trompé. Je pensais avoir installé python 2.4 mais en fait non :frowning:
Je me suis servis de synaptic et j’ai choisis “python 2.4”
Mais ce n’est pas. Le repertoire que tu me donne existe mais est vide…
En fait il faut que je choisisse “phyton” tout court mais mon synaptic me dit que la derniere version est la 2.3.5… Celle que j’ai deja sur mon systeme.
Il faut surrement que j’ajoute un repository a mon source.list mais je n’en trouve pas pour python 2.5 (en fait je trouve jamais de repository, j’ai du mal a comprendre je crois)

Vu que je suis en sarge, j’ai que des liens vers des depot stable.
J’ai essayé de rajouté un depot unstable juste pour essayé de trouvé python 2.4 mais en fait meme avec un depot unstable je n’ai pu passé que de la version 2.3.4 a 2.3.5 (ou un truc comme ca :frowning: )

J’ai refais les tests (au cas ou) mais c’est toujours pareil…

Je suis en train de telechargé un live cd de ubuntu la pour faire le test…
J’ai vu que sur disto watch, y avait vraiment plus de gens qui utilisait ubuntu que debian (et moi je veux garder le apt-get car je trouve ca vraiment pratique pour un debutant)

Si tu d’autre idée je suis encore preneur :slight_smile: (et si je te saoul pas )

merci encore en tout cas

EDIT: j’ai testé avec le dernier live cd de ubuntu.
Il y python 2.4.2 en statndart
Mais ca me fait la meme chose :frowning:
Le script plante pareil et voici les le resultat de la console quand j’essais ce que tu m’as dis:

Bonne journée / nuit!

Salut
J’ai étais un peut long a répondre parceque je n’ai pas eu trop le temp de chercher. Je te le dit tout de suite, je n’est pas trouvé de solution. Toutes les personnes qui ont eu le même type de probléme que toi l’ont résolu avec la fonction que je t’ai indiqué :confused:

J’ai testé une vieille Ubuntu (d’un an je crois avec Python 2.3) elle a exactement le même probléme, en plus il est impossible d’écrir un caractére accentué dans l’interpréteur…

Au faite, l’autre fois je me suis planté de chemin, c’est pas /usr/local/lib mais /usr/lib , en plus on le vois bien dans tes messages d’erreur :paf:
A tout hazar, tu peut tenter une installation a la main.
http://www.python.org/ftp/python/2.4.2/Python-2.4.2.tar.bz2
Je n’ai jamais fait d’installation manuel donc je ne suis pas du tout sûr que ca marche ni même que ca serve a quelque chose, mais bon …
Dans le répértoire où c’est décompressé:
>./configue --enable-unicode=ucs2 --prefix=/usr
Normalement il n’a besoin du ucs2 que pour les RedHat peut-être pour les debian aussi :neutre:, il y a aussi ucs4 et peut-être udf8
>make
>make altinstall
Avec altinstall, Python est installé mais le lien symbolique /usr/lib/python ne sera pas modifié, ca te permet de garder la bonne version pour ton systéme et de testé la nouvelle.

Et puisque c’est quand même la section programmation, voila un script qui test tout les valeurs de locale :slight_smile:


import locale

for temp in ( locale.locale_alias.keys() + locale.encoding_alias.keys() ):
        try:
                locale.setlocale(locale.LC_ALL,temp)
        except locale.Error:
                pass
        else:
                print "Bingo : %s" %(temp)

Tu le met dans un fichier avec extension .py . Fait bien attention a pas perdre l’indentation lors du copier/coller, c’est indispensable en python!
>python /CheminVersFicher/NomFichier.py
pout ton python par défaut
ou
pour ton instal à la main
>/CheminVersPythonX.X/python /CheminVersFicher/NomFichier.py
Il t’affiche les valeurs qui ont fonctionnées, si aucune ne marche … il n’affiche rien.

Tu pourrait posser ta question sur le Forum Pyhon de developpez.net ou sur un forum debian/ubuntu. Parceque là … je t’avourais que je séche … :peur: