根据 id3v2.4.0 的标准,tag 里的字符串可以使用 ISO-8859-1、UTF-16、UTF-16BE、UTF-8 四种编码。咱们 id3 tag 用 gb 编码的其实是宣称它用的 ISO-8859-1 的编码,这样的 tag 也就是在中国的电脑上有可能正常显示(只是有可能,也不一定,咱们都是目击证人,呵呵)。如果是遵照人家的标准写的 tag 的话,拿到哪台电脑上都能正常显示,只要有合适的字体就行。
用 千千静听 写的 UTF-16 编码的 id3v2.3.0 tag 就是合乎标准的,可以正常地在 windows 里,在 rhythmbox 里,在 totem 里显示──不用任何补丁和设置的。至于 mp3 随身听,只要是神智健全的产品,都支持标准的。现成的例子就是前面那位兄弟的 iriver,还有 nokia 的手机。
xLoneStar 老兄,不是我泼你的冷水,我觉得与其写一个纵容错误的补丁,不如写程序把现有的 mp3 转一转。毕竟标准本来就是用来遵守的。我自己就写了一个 C 语言程序把我的 mp3 转成 id3v2.4 UTF-16 编码的了。现在在 Linux 下和 千千静听 里都没问题,可是 Windows Media Player 不认──好像它最高就认 3.0 的 tag。难怪 千千静听 写的 tag 是 3.0 而不是 4.0 的。
另外,beep-media-player 写的 tag 是 UTF-8 编码的,但它也没遵守标准。以致于在 rhythmbox 这些遵守标准的播放器里不能显示,在 Windows 里也不能显示……晕……因为 easytag 和 id3v2 这些程序和 bmp 用的一样都是 id3lib 这个库,所以,它们写的 tag 应该也是不标准的。推荐使用 eyeD3 这个程序。
不要用 id3lib 这个库了。我写的那个程序用的是 libid3tag 这个库。另外好像 libtag 库也可以用,不过是 C++ 语言的。