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控制台英汉汉英电子词典
Apr 23 Python
python处理图片之PIL模块简单使用方法
May 11 Python
解析Python中的二进制位运算符
May 13 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 Python
用Python提取PDF表格的方法
Apr 11 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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
B2K与车机的中波PK
2021/03/02 无线电
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
跟我学Laravel之路由
2014/10/15 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
基于jquery的模态div层弹出效果
2010/08/21 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
python实现SMTP邮件发送功能
2020/06/16 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
一套带网友答案的.NET笔试题
2016/12/06 面试题
普罗米修斯教学反思
2014/02/06 职场文书
委托书范文
2014/04/02 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
美术教师个人总结
2015/02/06 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
小程序自定义轮播图圆点组件
2022/06/25 Javascript