Ubuntu 7.10下mp3标签乱码的解决

Yeolar   2008-03-03 12:38  

mp3的标签类型和编码, 现在主要有以下几种标准:

标签类型 支持的编码
ID3v1 ISO--8859-1
ID3v2 2.3 ISO--8859-1, UTF-16
ID3v2 2.4 ISO--8859-1, UTF-16, UTF-8
APEv2 UTF-8

由于ID3v1只支持ISO-8859-1编码, 如果使用它存储GBK编码的中文信息, 在Linux下通常都为乱码. ID3v2 2.3增加了支持UTF-16编码, ID3v2 2.4又增加了支持UTF-8编码, 但是它们都没有统一编码格式. 而APEv2把编码格式统一为UTF-8, 这样就没有了乱码问题. 但目前Linux下支持APEv2标签的播放器很少 (Rhythmbox支持), 而国内下载的mp3也基本上都没有APEv2标签.

一首mp3的标签可以包含多种类型. 播放器对mp3标签的读取顺序一般为 (APEv2,) ID3v2, ID3v1. 由于Rhythmbox可以读取APEv2标签, 所以有时会出现Rhythmbox标签显示正常, 其他播放器标签显示不正常(读取ID3标签)的情况.

在Linux系统中, mp3播放器都是依赖系统内的libid3tag库, 而libid3tag库是完全按照ID3的标准来读取标签内容的. 如果标签采用Unicode编码, 则显示正常; 如果采用其他编码, 则以ISO--8859-1编码读取, 这就产生了乱码.

对于乱码问题,较好的解决办法是将mp3标签转换为Unicode编码.

在Ubuntu 7.10下, 安装一个Python编写的ID3标签转码工具Mutagen:

1 # apt-get install python-mutagen

它可以将ID3标签转换为Unicode编码并使用ID3v2格式存储.

将GBK编码的标签转换为Unicode编码:

1 $ mid3iconv -e GBK *.mp3    # 转换当前目录下所有 mp3 文件
2 $ find . -iname ""*.mp3"" -execdir mid3iconv -e GBK {} \; # 转换所有, 包括子目录下的

它会同时用Unicode编码填满ID3v1, ID3v2, APEv2标签, 由于ID3v1不支持中文的Unicode编码, 所以转换后的ID3v1标签全是问号. 可以加上 --remove-v1 参数, 转换后删除ID3v1标签.

1 $ mid3iconv -e GBK --remove-v1 *.mp3

http://www.yeolar.com/note/2008/03/03/ubuntu-710-mp3/

http://www.yeolar.com/note/2008/03/03/ubuntu-710-mp3/