2010-12-01 5 views
0

あなたは(pygame.mixer.music.openを使用しようとする)は、Unicode文字を含むファイル名の文字列では、UnicodeEncodeErrorをすべての時間を投げるようだ:パイソン: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) 

os.path.exists(x)を使用してxの存在を確認し、Trueを返しました。私は何か間違っているのですか?もしそうでなければ、pygameのミキサー(.pydファイル)を手動で修正することは可能ですか?

私はPython 2.6とPygame 1.9.1を使用しています。

私は開こうとしたファイルを忘れましたが、mp3ファイルですが、Pygameのウェブサイト/ wikiの状態pygame.mixer.musicはこれらのファイルで動作するはずです。実際には、ファイル名にはASCII文字しか含まれていない限り、そうします。

+0

渡す前にファイル名のデコードを試しましたか? –

+0

私はそうしましたが、どちらもうまくいきませんでした。 – lvk

答えて

0

代わりにファイル名を渡すのでは、Unicodeの互換性のある方法でファイルを開き、pygame.mixer.music.load

+0

私はopen()を使ってそのオブジェクトを渡そうとしましたが、動作していないようです。私はもう間違っているのですか? – lvk

+1

あなたは何を得ていますか?まだ例外がスローされていますか? – SingleNegationElimination

+0

申し訳ありません私はそれを含めるのを忘れていました。私は 'pygame.error:モジュールフォーマットが認識されない'というエラーが出る。たとえファイル名がASCII文字だけであったとしても。 – lvk

0

にファイルオブジェクトを渡すあなたは

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

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

を試してみましたそれとも、試みることができます、私は知らない、何かのようなもの

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

FYI、PEP8から:関数の引数の名前が予約されたキーワードと衝突する場合は、省略形やスペルの破損を使用するのではなく、末尾に1つのアンダースコアを追加する方が一般的に適しています。したがって、 "print_"は "prnt"よりも優れています。 (おそらく、シノニムを使用してこのような衝突を避ける方が良いでしょう。) –

関連する問題