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 相关文章推荐
Python3.6简单操作Mysql数据库
Sep 12 Python
python如何对实例属性进行类型检查
Mar 20 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
在pycharm中显示python画的图方法
Aug 31 Python
python取均匀不重复的随机数方式
Nov 27 Python
python 实现矩阵填充0的例子
Nov 29 Python
Python对wav文件的重采样实例
Feb 25 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
python 标准库原理与用法详解之os.path篇
Oct 24 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的引用原因分析
2012/09/06 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
简单谈谈json跨域
2016/03/13 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
python引用DLL文件的方法
2015/05/11 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
简单了解django缓存方式及配置
2019/07/19 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
活动志愿者自荐信
2014/01/27 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
捐款倡议书
2014/04/14 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
工作岗位职责范本
2015/02/15 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
李强为自己工作观后感
2015/06/11 职场文书