pygame加载中文名mp3文件出现error

  

 

 

  好一阵子没有写东西了,最近几天在作一个基于Python pygame的音乐播放器,原本想作完了,再来发篇文章的,可越作越深,框架大体出来了,考虑周期比较长,也多是我我的问题,作得比较慢.下面来谈谈pygame.mixer.music.load()加载中文名的mp3文件问题. html

(发表时间2017-03-30 22:45:58 原创连接http://www.cnblogs.com/dearvee/p/6649055.html)python

 

 


 


 


 

#修正:程序员

2017-04-01 12:51:59编程

 

  今天看了python3.3.3官方文档编码部分,前天的方法(也就是下面的方法)是多余的,当时就感受有点蹩脚,在此修正解决办法,而且修正前天的错误观点,也就是python对中文不太友好的错误观点.缓存

绝大部分bug取决于程序员自身的功底,而不是某个编程语言自己的问题.我向python以及python的追随者道歉.这是个人学习不够普遍,或者说脚踏实地,致使了前面过于片面乃至错误的观点.框架

 

下面直接上解决方法:编程语言

解决的问题即pygame.mixer.music.load()对中文的识别问题.学习

file=file.encode('utf-8')

 

好吧,再恬不知耻的来个测试吧Q_Q:测试

下面是不改变编码带来的pygame.error错误google

 

 

改变编码为utf-8,排除了pygame.error错误

如今程序能够正常播放中文文件名的mp3文件了.

再次为前天关于python的中文识别方面的错误观点道歉.

而且但愿阅读笔者其余文章的同窗,发现笔者的说辞,或者办法存在问题,可以在评论里斧正,谢谢.

 


 


 


 

 

 

 

 

#这个是前天那个蹩脚的解决办法

2017-03-30 22:45:58

#前言: 

  今天刚刚作了个音乐列表,但笔者发如今指定目录mp3文件名为中文时,便出现pygame.error,不能正确加载指定mp3文件.写好的代码不想再改了,来个小测试吧

#pygame播放mp3文件:

  这里笔者只介绍一种好理解的方法,具体请查看pygame.mixer.music官方文档 

打开官方文档,笔者发现,像是发现了新大陆同样,这家伙太强大了,而如今我只能用它来播放个人mp3.好吧,剩下的等待之后来发掘吧.干什么讲什么,来个播放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.

#发现Bug:

  接着就是笔者在下午作完音乐列表测试播放的时候遇到的问题,即当待加载mp3文件名包含中文时,出现的pygame.error.

 

这就尴尬了,经过输出的path,发现中文没有乱码,笔者google了下,发现中文的社区有人说python应该尽可能避免中文.也有人说能够改一下编码.但笔者试了,貌似不能够.英文社区相似Stack Overflow,均没有关于这个问题的解决方法.毕竟人家老外不太关心''咱们本身的事''.因而,爬了半天,没找到有效的解决办法.好吧,这是硬伤.固然,大牛们应该是能够经过更改pygame中源代码解决的,这不是我能作的事^_^.

#debug:

  笔者来了个好玩的方法,应该还有更好的实现方法,我先来厚着脸皮说一下个人debug思路:

  首先,当遇到中文名mp3是出现pygame.error 这时,程序出现严重错误.很天然想到try语句.这样,当遇到中文名mp3时出现error,自动转到except内容.笔者想到复制待播放文件到指定目录,并重命名为非中文.最后加载此非中文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()

#运行效果:

此时,程序已经能够正常播放中文名mp3文件.其实此问题并无从本质上解决pygame中文识别问题,而是绕过了这个问题.这个方法也是有个弊端,就是会产生play.mp3这个文件,在作项目的时候能够放在缓存目录里.

 

  至此,关于解决今天下午遇到的pygame中文识别问题叙述完毕,若有更好的方法,望请评论告知,谢谢.

刚才看了下python3.3.3 pygame目录,文件mixer.pyd科普了一下.pyd后缀,发现和dll同样是二进制文件,更改内容须要反编译.也就是说python并非彻底开源的.