转贴:ubuntu Rhythmbox歌曲名乱码问题

ubuntu存在好多乱码问题,幸好网上高人无数,对这些问题还都有解决之道。
先说最简单的解决办法吧!
sudo apt-get install python-mutagen 安装上这个东西
而后跳入到存放音乐文件的目录下,输入指令mid3iconv -e gbk *.mp3便可。通常音乐都是gbk编码,而后会转化为utf-8吧!我试了试,果真颇有效。
如下是网上转的相关细节
一、了解 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 就不会存在乱码问题。

二、了解各类播放器对 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 )写入,不愧被誉为经典

三、解决办法

既然明白了乱码的缘由,就得找解决办法,一种办法就像 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
java

相关文章
相关标签/搜索