2019独角兽企业重金招聘Python工程师标准>>>

ubuntu存在好多乱码问题,幸亏网上高人无数,对这些问题还都有解决之道。
先说最简单的解决办法吧!
sudo apt-get install python-mutagen 安装上这个东西
然后跳入到存放音乐文件的目录下,输入指令mid3iconv -e gbk *.mp3即可。一般音乐都是gbk编码,然后会转化为utf-8吧!我试了试,果然很有效。
以下是网上转的相关细节
1、了解 mp3 标签类型和使用的编码

首先说 mp3 标签类型和编码,大家应该知道目前主要存在这几种标准,ID3v1, ID3v2 2.3, ID3v2 2.4,APEv2,ID3v1 只支持 ISO-8859-1 编码 (编码集参考),严格的说它是不支持中文的 (并不代表它不能储存中文信息,目前中文mp3 的 ID3v1 标签都使用这个字段来储存 GBK/GB18030 编码的中文信息),而第二版 (ID3v2) 支持的格式增加了utf-16,直到 2.4 版才开始支持 uft-8,但 ID3v2 标准没有统一标签内容的编码,例如 2.4 版的 ID3v2 你可以使用ISO-8859-1 编码,也可以使用 utf-16/uft-8 这种 Unicode 编码格式。做得最好的是APEv2,它不但有很好的扩展性,而且还把编码格式统一为 utf-8,这样一来只要支持 APEv2 读取的播放器播放带有 APEv2 标签的mp3 就不会存在乱码问题。

2、了解各种播放器对 mp3 标签读取情况

接下来研究的就是各种播放器对这几种标准的标签支持程度,测试的播放器有:gnome 自带的 Rhythmbox 0.10.0,Listen 0.5, Banshee 0.12.1+dfsg-3, Quod Libet 0.24, Exaile! 0.2.8, GMPC0.13.0, Audacious 1.2.2。

测试的方法很简单,用一个 mp3 文件,分别写入不同类型的标签 (排列组合下来共 20 多种),在 ID3v1 和 ID3v22.3/2.4 中分别使用不同的编码写入中文信息 (如 GBK编码),然后用这些播放器去读取,得到其结果。从这次的测试结果来看,Rhythmbox 对各种 mp3 的标签支持最好,这主要归功于它支持APEv2 标签的读取。而 Banshee 和剩下的播放器完全一样,都不支持 APEv2 的读取,这个就能很好的解释为什么一些 mp3 在Rhythmbox 上正常,在其他播放器上就会乱码。原因是现在很多 mp3 为了兼容,都同时使用了 ID3v1 和 APEv2标签,Rhythmbox 读取 ID3v1 一样会乱码,但它优先读取了 APEv2 标签,而 Banshee 这些播放器不支持 APEv2就只能读取 ID3v1,当然会乱码了。

他们的共同特点就是,所依赖的 libid3tag 库完全按照 ID3 标准来读取标签内容。不管使用何种标准的标签,只要是读取以Unicode 编码的中文内容,肯定没有问题,遇到 GBK/GB18030 编码的中文内容时,还是把它当成 ISO-8859-1编码来读取,不乱才怪。

ps: Vista 上的 WMP 不支持 ID3v2 2.4 和 APEv2标签的读取,但它很聪明不能读取就用文件名代替,千千静听支持全系列标签的读取,但不支持以 ID3v2 2.4 标准的写入,不知道即将发布的5.0 有变化没有。foobar2000 v0.9.4.3 支持全系列标签的读取,默认使用 ID3v2 2.4 ( utf-8 )写入,不愧被誉为经典。

3、解决办法

既然明白了乱码的原因,就得找解决办法,一种办法就像 Win上的播放器一样,可以根据本地的编码方式来解码,或使用一些其他转码机制,要不还可以选择优先读取顺序。以上测试的播放器中除了 Audacious外其他都不支自定义编码读取功能。另外一个解决办法就是把 mp3 标签转换为 Unicode编码,这种方式既简单又支持标准,推荐大家使用。如果像 Banshee 一样支持显示文件路径也可以解决乱码问题,但这不是根本之道。

目前发现有 2 个工具可以把标签转换为 Unicode 编码,而且都支持批量转换。

1) 一个是周枫用 java 编写的 ID3iconv 0.2.1,最后更新时间为 2004/2/20。

使用方法:
java -jar ~/id3iconv-0.2.1.jar -e gbk *.mp3

如果想转换当前目录下的所有 mp3 (包括子目录):
find . -iname "*.mp3" -execdir java -jar ~/id3iconv-0.2.1.jar -e gbk {} \;

* 注意以上 ~/id3iconv-0.2.1.jar 位置根据自己情况而定
* 相信现在大陆绝大多数能找到的 mp3 标签都是以 GBK/GB18030 编码,使用 -e gbk 来处理就够了,当然你也可以使用 -e gb18030 来处理。
* -e gbk 参数是代表把 GBK 编码的标签转换为 Unicode 编码,本身是 Unicode 编码的就不转换。如果需要转换其他编码的文件可以自行修改,如改为 Big5。
* 经测试,转换后为 2.3 版的 ID3v2,编码格式为 uft-16

2) 另外一个是用 Python 写的 “Mutagen”,目前最新版本 1.11,Ubuntu 7.04 源里也带有 1.10 版本的 Mutagen,可以用这个命令来安装:
sudo apt-get install python-mutagen

ps:安装 Quod Libet 和 Listen 都必须这个

使用方法:
mid3iconv -e gbk *.mp3

如果想转换当前目录下的所有 mp3 (包括子目录):
find . -iname "*.mp3" -execdir mid3iconv -e gbk {} \;

* 相信现在大陆绝大多数能找到的 mp3 标签都是以 GBK/GB18030 编码,使用 -e gbk 来处理就够了,当然你也可以使用 -e gb18030 来处理。
* -e gbk 参数是代表把 GBK 编码的标签转换为 Unicode 编码,本身是 Unicode 编码的就不转换。如果需要转换其他编码的文件可以自行修改,如改为 Big5。
* 经测试,转换后为 2.4 版的 ID3v2,编码格式为 uft-16
* 不过它会同时用 Unicode 编码填满 D3v1, ID3v2, APEv2 标签,但是 ID3v1 又不支持中文的Unicode 编码,所以转换后的 ID3v1 标签全是问号。所以最好加上 –remove-v1 参数,转换后删除 ID3v1 标签。
mid3iconv -e gbk --remove-v1 *.mp

转载于:https://my.oschina.net/jianweizhang/blog/12212

转贴:ubuntu Rhythmbox歌曲名乱码问题相关推荐

  1. Rhythmbox歌曲名乱码问题

    http://hi.baidu.com/l1xh330318747/blog/item/2039e783f451d3d4bc3e1e95.html 安装: sudo apt-get install p ...

  2. Mp3tag中文设置方法(解决mp3歌曲名乱码,出现问号的问题)

    解决Mp3tag中文设置方法(解决mp3歌曲名乱码,出现??问题) Mp3tag(mp3标签修改器)软件是MP3文件ID3-Tag信息修改器.所谓ID3-Tag 信息,就是在MP3文件中加入曲名.演唱 ...

  3. 歌曲名、艺术家名显示乱码

    歌曲名.艺术家名显示乱码 MediaPickerActivity.java中添加方法changeStringEncode用来转换字符串编码: publicstatic String changeStr ...

  4. Rhythmbox导入中文歌曲出现乱码解决

    Rhythmbox导入中文歌曲出现乱码,每次看到很是不爽,而且下载歌词还要该标题和作者.最近谷歌了下,发现也不是很难解决. 进入你的音乐文件夹执行如下代码: mid3iconv -e GBK *.mp ...

  5. Ubuntu 几种常见乱码解决方法

    文非原创,因在网上看到这篇文章非常好,故拿来和大家分享,要查看原文请看 missfall的网易博客: http://coolwinding.blog.163.com/blog/static/11224 ...

  6. java获取音乐_Java读取MP3文件的信息(歌曲名,歌手...)

    还记得之前写一款Android播放软件时,为了让APP获得MP3音乐文件的相关信息,上网找了很多Java库.搞的APP满身赘肉.后来我研究了一下MP3文件的结构后发现,获取MP3文件信息根本不需要什么 ...

  7. C++ 动态库导出函数名“乱码”及解决

    刚接触C++,在尝试从 dll 中导出函数时,发现导出的函数名都"乱码"了. 导出过程如下: 新建一个Win32项目: 新建的解决方案里有几个导出的示例: // 下列 ifdef ...

  8. linux smtp 发送邮件乱码,使用gomail发送邮件之解决附件名乱码的问题

    在使用Go语言开发时,我们会遇到发送邮件的需求,在Go语言标准包中,也提供了邮件发送客户端smtp的封装.不过,该标准包只提供了基础的邮件发送过程,对于一些复杂的定义还需要自己去封装,封装过程就需要依 ...

  9. Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法

    Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法 文件是在WIndows 下创建的,Windows 的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码 不 ...

  10. ubuntu终端Git中文乱码

    ubuntu终端Git中文乱码:200\273\347\273\223 使用git add添加要提交的文件的时候,显示形如2200\273\347\273\223乱码.  解决方案:git confi ...

最新文章

  1. RedHat企业版的安装(一)
  2. 计算机技术在农业上应用论文,浅谈计算机在农业中的应用论文(2)
  3. BODY background=自适应大小_自适应(电脑/平板/手机)网页,自适应网页设计练习总结...
  4. 东北电力大学计算机网络复试题,2020年东北电力大学计算机学院复试(20200901201159).pdf...
  5. BZOJ2299 [HAOI2011]向量 【裴蜀定理】
  6. ftp 文件服务器预览,web文件服务器 ftp 预览
  7. POJ3614,P2887-Sunscreen(防晒霜)【贪心】
  8. 【NOIP2013积木大赛,NOIP2018铺设道路】积木大赛(思维,贪心)
  9. Linux系统有od程序吗,Linux od命令
  10. python的魔法方法
  11. SIGPIPE 13 和其他信号的对照表
  12. 关于抛异常后事务回滚的一点小事儿
  13. Steam游戏上线初期的总结与思考
  14. 外媒称百度AI领跑全球,一场“战疫”告诉你为什么
  15. 乐学Python作业题
  16. python opencv调用摄像头并追踪移动物体,浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估...
  17. LVS负载均衡群集—NAT模式实例
  18. 强化学习笔记:强化学习的约束
  19. 最新:亚马逊运营思路
  20. 知道这些,让你在使用Prism 8 时更加得心应手!

热门文章

  1. MDK中编译报错 Error: L6218E: Undefined symbol SystemInit (referred from startup_cmsdk_cm0.o).
  2. 小型的 JavaScript 虚拟键盘
  3. 【JZOJ3337】wyl8899的TLE【二分】【哈希】
  4. 针对3-Des的Merkle Hellman攻击
  5. Windows server2016 计算机管理中找不到用户和组
  6. php 使用alert,PHP实现通用alert函数的方法
  7. Ant Design ProV5 Table columns定义valueType
  8. centos 6 python django mysql_CentOS 6.5中部署django+uwsgi+nginx+mysql项目
  9. 边境的悍匪—机器学习实战:第二章 端到端的机器学习项目
  10. matlab中floor函数,Matlab基本函数-floor函数