解决ubuntu和Android的mp3乱码问题

android也是Linux系统,解决乱码的原理是一样的。

音频文件可以使用的tag版本非常多,mp3大多使用这三个:ID3v1、ID3v2、APEv2,每个版本下又有多个小版本。Windows只能支持ID3v1,ID3v1其实是不支持多语言的,但因为Windows平台使用本地语言编码页去处理那些多字节字符串,简体系统中文字符能够显示出来,倘若来了个Shift-JIS的ID3v1,Windows就只能乱码了。这种情况和txt是一样的。如果将mp3的ID3v1抹掉,Windows自身的资源管理器和media player将不能识别mp3信息。ID3v2和APEv2都支持Unicode,这才是真正的多语言支持。让播放器去猜ID3v1的编码类型是最笨的方法。因此并不是说Windows的编码兼容性好,Linux就差,仅采用多字节编码去写ID3v1才是真正的罪魁祸首,杯具的是大多数mp3文件都是这样子,而Windows是其推手。

标签的使用优先度是播放器的事,支持是否也是播放器的事。一般而言,大多数播放器都支持ID3v2和ID3v1,ID3v1的优先度会设得比较低。Foobar2000支持APEv2、ID3v2、ID3v1,优先度应该是APEv2最高,ID3v1最低。在Foobar2000上转换出来的mp3的兼容性相当好,fb2k默认会写ID3v2(UTF-8)和ID3v1(本地编码),ID3v1实现了Windows平台(资源管理器和wmp)的兼容,ID3v2实现了多语言支持。Linux的播放器一般都支持ID3v2,而且优先度比ID3v1高,因此播放这些mp3不会乱码。

故一个较好的方案是:UTF-8的ID3v2+本地编码的ID3v1。这个工作fb2k 0.9版本以上可以完成(0.8.3不清楚)。

操作如下图所示,首先选中要转换的曲目,弹出右键菜单,tagging->MP3 Tag Types

勾选ID3v1和ID3v2,APEv2可选可不选,但Linux下很多播放器都不支持APEv2,所以建议不选。Updates files,完毕。

这可以为ID3v2缺失的mp3文件重建UTF-8的ID3v2。

倘若在ubuntu下仍然有乱码,不用怀疑,那是因为ID3v2不是UTF-8编码。ID3v2是可以存放本地多字节编码的,mp3若已经存在ID3v2,fb2k会跳过而不重新生成,导致ubuntu下仍然是乱码。这种情况我们可以借助APEv2做中介(APEv2只支持UTF-8,且字段比ID3v1丰富)。勾选APEv2,Update files(生成UTF-8的APEv2)–>去掉ID3v2的勾,Update files(擦掉非UTF-8的ID3v2)–>勾上ID3v2,Update files(重写UTF-8的ID3v2)。最后的APEv2保留是否随意。fb2k擦写ID3v2比较耗时,因为ID3v2位于头部,需要重构文件,处理几百M文件以上就会觉察到了。但毕竟非UTF-8的ID3v2文件是少数,ID3v2是不是本地编码在fb2k中也看不出来,这项修正工作可以到ubuntu下完成。rhythmbox(支持APEv2和ID3v2)、audacious和Amarok(仅支持ID3v2),这些播放器的播放列表如果还存在乱码曲目,用wine加载fb2k对乱码曲目执行上面步骤。

以上基本可以解决Android和ubuntu的乱码问题。再赞foobar2000,非常优秀的播放器,优秀是表现在能力上,不是在界面。倘若添加“仅为非UTF-8 ID3v2重构UTF-8 ID3v2”那就更完美了。

2010年6月15日 | 归档于 android
  1. 2011年8月3日 15:36 | #1

    :-P 说得不错哈

  2. original-point
    2011年6月9日 08:32 | #2

    不是很明白,,,,不论怎样调还是乱码

  3. 烈之斩
    2010年8月20日 00:24 | #3

    我以前对id3进行过一系列的研究,有些结论发现被你忽略了:P

    其实windows是支持id3v2的 甚至不仅仅支持ansi编码的v2,还支持unicode的——但是你会发现如果你用foobar写一个utf-8的id3v2 wmp根本播不了,别提提取信息了。

    这原因在于,windows只支持utf-16编码的id3v2(未证实,仅根据千千静听的说法)。而如果你用千千静听写入tag信息,方法选择id3v2+编码utf-16,可以兼容目前绝大部分播放器。

    foobar似乎也考虑到了这个问题,他在设置中放置了一个选项——使用兼容模式写入id3v2。如果你勾选了这个模式(此时id3版本会被iTunes识别为id3v2.3,而不是更新的id3v2.4),那么windows就可以顺利识别和播放,究其原因可能是采取了和非兼容模式不同的编码而顺利被wmp识别(注意依然是unicode而非ansi,因为可以顺利保存日语的点・),但是具体是不是utf-16我也不清楚,因为当初还不会耍hex文件查看器xsk。

    但是这个兼容模式也有个致命的缺点,他支持一些固定的字段(可能是出于兼容性考虑),不能自定义字段暂且不提,甚至连非常常见的一些比如album_artist都不支持,可以说利弊都很明显。

    综上,foobar并没有一个非常完美的mp3 tag保存方案(同时保存id3v1/v2这个方法的致命缺点是id3v1支持的字节数非常有限,还不支持unicode,这样保存很多acg系专辑就很麻烦;使用兼容模式的id3v2可能是一个相对而言不错的选择,仅仅牺牲一些不常用字段,但也让人挺不爽的)——相对于千千静听而言,这也是一直让我这foobar忠实用户很不爽的一点。

    当初后来想要再深入研究下id3的,但是后来很少听mp3就搁置了。

发表评论

取消
XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: