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实现命令行通讯录实例教程
Aug 18 Python
python获取指定时间差的时间实例详解
Apr 11 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
python实现控制台打印的方法
Jan 12 Python
python实现网页自动签到功能
Jan 21 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
什么是Python变量作用域
Jun 03 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 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+MSSQL分页的例子
2006/10/09 PHP
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
jsonp原理及使用
2013/10/28 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
js随机生成一个验证码
2017/06/01 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
浅谈微信小程序flex布局基础
2018/09/10 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
Python中unittest用法实例
2014/09/25 Python
浅析Python中的多条件排序实现
2016/06/07 Python
详解python3百度指数抓取实例
2016/12/12 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
如何通过python实现全排列
2020/02/11 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
python实现登录与注册系统
2020/11/30 Python
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
求职信的要素有哪些呢
2013/12/26 职场文书
活动总结报告怎么写
2014/07/03 职场文书
党建工作整改措施
2014/10/28 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
整理Python中常用的conda命令操作
2021/06/15 Python