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


Posted in Python onMarch 31, 2017

前言: 

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

pygame播放mp3文件:

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

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

打开官方文档,笔者发现,像是发现了新大陆一样,这家伙太强大了,而现在我只能用它来播放我的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.

pygame加载中文名mp3文件出现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()

运行效果:

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

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

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

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
Python实现的Kmeans++算法实例
Apr 26 Python
python查找目录下指定扩展名的文件实例
Apr 01 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
python 常用的基础函数
Jul 10 Python
Python实现的括号匹配判断功能示例
Aug 25 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
python爬虫要用到的库总结
Jul 28 Python
Python中的With语句的使用及原理
Jul 29 Python
基于python实现复制文件并重命名
Sep 16 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Python自动发邮件脚本
Mar 31 #Python
Python中查看文件名和文件路径
Mar 31 #Python
使用python遍历指定城市的一周气温
Mar 31 #Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 #Python
Python爬取网易云音乐热门评论
Mar 31 #Python
Python中Django发送带图片和附件的邮件
Mar 31 #Python
使用Python对Access读写操作
Mar 30 #Python
You might like
Session的工作方式
2006/10/09 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
php,ajax实现分页
2008/03/27 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
PHP反射基础知识回顾
2020/09/10 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
JavaScript入门学习书籍推荐
2008/06/12 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
代码中finally中的代码会不会执行
2012/02/06 面试题
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
竞聘上岗演讲稿范文
2014/01/10 职场文书
交通事故私了协议书
2014/04/16 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
高中生毕业评语
2014/12/30 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
nginx中proxy_pass各种用法详解
2021/11/07 Servers
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL