2010-12-01 6 views
0

Lorsque vous essayez d'utiliser pygame.mixer.music.open() avec une chaîne de nom de fichier contenant des caractères Unicode, il semble jeter un UnicodeEncodeError tout le temps:Python: les noms de fichiers et pygame.mixer.music unicode

File "C:\TestPlayer.py", line 43, in <module> 
pygame.mixer.music.load(x) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-19: 
ordinal not in range(128) 

(lignes cassées pour votre plus grand plaisir)

J'ai vérifié l'existence de x en utilisant os.path.exists (x), qui renvoyait True. Est-ce que je fais quelque chose de mal? Sinon, est-il possible de réparer manuellement le mélangeur de pygame (qui est un fichier .pyd)? J'utilise Python 2.6 et Pygam 1.9.1.

J'ai oublié d'ajouter le fichier que j'ai essayé d'ouvrir est un fichier mp3, mais les états du site/wiki de Pygame pygame.mixer.music devraient fonctionner avec ceux-ci. En fait, c'est le cas, tant que le nom de fichier ne contient que des caractères ASCII.

+0

Avez-vous essayé de décoder le nom de fichier avant de le passer? –

+0

Je l'ai fait, ce qui ne semble pas fonctionner non plus. – lvk

Répondre

0

Au lieu de passer un nom de fichier, ouvrez le fichier dans une unicode manière compatible et passer l'objet fichier à pygame.mixer.music.load

+0

J'ai essayé d'utiliser open() et de passer cet objet, mais cela ne semblait pas fonctionner. Est-ce que je me trompe encore? – lvk

+1

Quelle est l'erreur que vous obtenez? l'exception est-elle encore levée? – SingleNegationElimination

+0

Désolé j'ai oublié d'inclure cela; J'ai 'pygame.error: format de module non reconnu', même si mon nom de fichier est composé uniquement de caractères ASCII. – lvk

0

Vous avez essayé

fle = open(filename, 'rb') 
pygame.mixer.music.load(fle) 

et

fle = open(filename, 'rb') 
pygame.mixer.load(fle.read()) 

Ou vous pouvez essayer , je ne sais pas, quelque chose comme

fle = open(filename, 'rb') 
foo = fle.read() 
pygame.mixer.load(fle.encode('ascii')) 
+0

FYI, à partir de PEP8: Si le nom d'un argument de fonction est en conflit avec un mot clé réservé, il est généralement préférable d'ajouter un trait de soulignement final plutôt que d'utiliser une abréviation ou une corruption d'orthographe. Ainsi "print_" est meilleur que "prnt". (Il est peut-être préférable d'éviter de tels conflits en utilisant un synonyme.) –

Questions connexes