pygame加載中文名mp3文件出現(xiàn)error
前言:
今天剛剛做了個音樂列表,但筆者發(fā)現(xiàn)在指定目錄mp3文件名為中文時,便出現(xiàn)pygame.error,不能正確加載指定mp3文件.寫好的代碼不想再改了,來個小測試吧
pygame播放mp3文件:
這里筆者只介紹一種好理解的方法,具體請查看pygame.mixer.music官方文檔
打開官方文檔,筆者發(fā)現(xiàn)這家伙太強大了,而現(xiàn)在我只能用它來播放我的mp3.好吧,剩下的等待以后來發(fā)掘吧.干什么講什么,來個播放mp3 test代碼:
import pygame path = 'Pam Pam - Noel Toto.mp3' pygame.mixer.init() pygame.mixer.music.load(path) pygame.mixer.music.play()
其中,path表示待播放mp3文件的路徑及文件名.這里筆者用的是源生的idle,可以正常播放此mp3.
發(fā)現(xiàn)Bug:
接著就是筆者在下午做完音樂列表測試播放的時候遇到的問題,即當待加載mp3文件名包含中文時,出現(xiàn)的pygame.error.
這就尷尬了,通過輸出的path,發(fā)現(xiàn)中文沒有亂碼,筆者google了下,發(fā)現(xiàn)中文的社區(qū)有人說python應(yīng)該盡量避免中文.也有人說可以改一下編碼.但筆者試了,貌似不可以.英文社區(qū)類似Stack Overflow,均沒有關(guān)于這個問題的解決方法.畢竟人家老外不太關(guān)心''我們自己的事''.于是,爬了半天,沒找到有效的解決辦法.好吧,這是硬傷.當然,大牛們應(yīng)該是可以通過更改pygame中源代碼解決的,這不是我能做的事^_^.
debug:
筆者來了個好玩的方法,應(yīng)該還有更好的實現(xiàn)方法,我先來厚著臉皮說一下我的debug思路:
首先,當遇到中文名mp3是出現(xiàn)pygame.error 這時,程序出現(xiàn)嚴重錯誤.很自然想到try語句.這樣,當遇到中文名mp3時出現(xiàn)error,自動轉(zhuǎn)到except內(nèi)容.筆者想到復制待播放文件到指定目錄,并重命名為非中文.最后加載此非中文mp3文件,從而繞過了pygame中文識別的硬傷.下面上代碼:
import pygame import shutil path = '一走過的日子-劉德華.mp3' pygame.mixer.init() try: pygame.mixer.music.load(path) pygame.mixer.music.play() except: print('something is wrong~\nbut i see you.') shutil.copyfile(path,'play.mp3') pygame.mixer.music.load('play.mp3') pygame.mixer.music.play()
運行效果:
此時,程序已經(jīng)可以正常播放中文名mp3文件.其實此問題并沒有從本質(zhì)上解決pygame中文識別問題,而是繞過了這個問題.這個方法也是有個弊端,就是會產(chǎn)生play.mp3這個文件,在做項目的時候可以放在緩存目錄里.
至此,關(guān)于解決今天下午遇到的pygame中文識別問題敘述完畢,如有更好的方法,望請評論告知,謝謝.
剛才看了下python3.3.3 pygame目錄,文件mixer.pyd科普了一下.pyd后綴,發(fā)現(xiàn)和dll一樣是二進制文件,更改內(nèi)容需要反編譯.也就是說python并不是完全開源的.
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
Python操作json數(shù)據(jù)的一個簡單例子
這篇文章主要介紹了Python操作json數(shù)據(jù)的一個簡單例子,需要的朋友可以參考下2014-04-04一文秒懂python讀寫csv xml json文件各種騷操作
多年來,數(shù)據(jù)存儲的可能格式顯著增加,但是,在日常使用中,還是以 CSV 、 JSON 和 XML 占主導地位。 在本文中,我將與你分享在Python中使用這三種流行數(shù)據(jù)格式及其之間相互轉(zhuǎn)換的最簡單方法,需要的朋友可以參考下2019-07-07使用python爬取連續(xù)降水數(shù)據(jù)信息實例
這篇文章主要為大家介紹了使用python提取連續(xù)降水數(shù)據(jù)信息實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01Python實現(xiàn)掃描局域網(wǎng)活動ip(掃描在線電腦)
這篇文章主要介紹了Python實現(xiàn)掃描局域網(wǎng)活動ip(掃描在線電腦),本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-04-04用python + hadoop streaming 分布式編程(一) -- 原理介紹,樣例程序與本地調(diào)試
Hadoop 是一個實現(xiàn)了 MapReduce 計算模型的開源分布式并行編程框架,借助于 Hadoop, 程序員可以輕松地編寫分布式并行程序,將其運行于計算機集群上,完成海量數(shù)據(jù)的計算。2014-07-07