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的web框架中中编写日志列表的教程
Apr 30 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
Python编程判断一个正整数是否为素数的方法
Apr 14 Python
Python模块、包(Package)概念与用法分析
May 31 Python
pow在python中的含义及用法
Jul 11 Python
python实现发送form-data数据的方法详解
Sep 27 Python
Python笔记之观察者模式
Nov 20 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Python3 A*寻路算法实现方式
Dec 24 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 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
php实现爬取和分析知乎用户数据
2016/01/26 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
php字符集转换
2017/01/23 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
python学习必备知识汇总
2017/09/08 Python
详解Python的循环结构知识点
2019/05/20 Python
Django model update的多种用法介绍
2020/03/28 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
python怎么调用自己的函数
2020/07/01 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
简单html5代码获取地理位置
2014/03/31 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
理工科学生的自我评价
2013/12/15 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
出售房屋协议书范本
2014/10/06 职场文书
学校德育工作总结2015
2015/05/11 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书