【转载】歌曲名乱码和ID3标签
aimp吧
全部回复
仅看楼主
level 15
朱0621 楼主
一直有用户反应在使用的过程中,遇到播放列表里面歌曲名显示乱码,包括PC版和安卓版
这是与MP3标签编码有关的,在网上搜索一下能找到很多相关资料,这里简单介绍一下ID3标签。
2017年11月04日 12点11分 1
level 15
朱0621 楼主

1. ID3标签的起源和发展
ID3v1.1:
起初,由于MP3格式标准里并没有特别定义保存曲目相关信息的结构,音乐播放器无法获取到MP3文件歌曲的任何信息,大家很受折磨。后来,有人(Eric Kemp)在1996年提出了一种解决办法,即在MP3
文件末尾添加128字节额外的数据空间来保存曲名、演唱者、专辑名、年份、曲目类型和备注信息。不久,Michael Mutschler 扩展了这种方案(加入在原始CD中的音轨号),并命名为ID3,并把他的改动版本命名为ID3 v1.1。
大家为ID3v1.1而欢欣雀跃不久后,又有新的问题产生了。某些音乐文件的标签文本太长,ID3 v1.1限定的30个字节不能容纳,把标签文本给截断了。的确,ID3v1、ID3v1.1有明显缺陷,字段名和字段长度都是固定死的,不可扩展,缺乏灵活性。因此,又有人提出新的ID3v2格式,试图解决这些问题,扩展ID3的功能。
2017年11月04日 12点11分 2
level 15
朱0621 楼主

ID3v2:
虽然从名称上ID3v2好像只是ID3v1的一个升级,实际在格式定义上ID3v2和ID3v1完全不同,ID3v2应该算一个全新的标签tag系统。ID3v2最大的改进应该是极大的增强了灵活性和可括展性。不仅每个字段的长度是可扩展的(再也不必为ID3v1 30个字符的限制而烦恼了),而且用户还可以很容易的添加自定义字段。
ID3v2 tag 支持 Unicode,可以包含歌词(包括同步信息),曲目的volume、balance、equalizer、reverb设置信息,甚至可以插入图片,支持链接外部信息和网页等等很多……
看上去ID3v2功能强大,真是不错,不过凡事都有两面性,ID3v2繁多的功能也带来一个负面问题,就是使得ID3v2太过复杂,实现起来比较困难。
还有一点值得注意的,ID3v2不像ID3v1存储在文件末尾,而是插入到音频文件的
最开头。原本的初衷是考虑网络上播放文件时可以先接收到相应tag信息。实际应用时却发现这么处理是弊大于利。兼容性变差、写入tag速度慢、耗费临时空间等。最新的ID3v2.4标准已经可以选择把tag存放在文件末尾。
ID3v2现在主要有
ID3v2.3和
ID3v2.4,二者的编码字符集不同。
2017年11月04日 12点11分 3
level 15
朱0621 楼主

2. APEv1 和 APEv2标签
APE也是一种tag格式,在APEv1基础上改进又有了APEv2。APE tag具有与ID3v2一样的灵活性和可括展性,字段名可自定义,字段长度可扩展,同时格式定义又不像ID3v2那么繁琐。APE tag的格式很简单,实现起来也很方便,tag存放位置是可选的,既可以在文件头也可以在文件尾(推荐在文件尾),所以有不少人对APEv2比较青睐。
2017年11月04日 12点11分 4
level 15
朱0621 楼主

3. 乱码的成因
乱码的原因主要是标签中文本
所用的编码和
显示时的编码不同导致。各种标签格式分别支持的编码为:
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
一般的MP3播放器都是完全按照ID3的标准编码来读取标签内容的(例如所有的Linux/FreeBSD系统依赖libid3tag库)。从上面的编码可以看出,不论mp3是采取何种的标准的标签(ID3v1、ID3v2、APEv2),只要mp3的标签的内容是
Unicode编码存储的,那么显示肯定是正常的(ID3v1的ISO-8859-1严格说是不支持中文,但是并不是代表它不能存储中文)。如果遇到是以GBK、GB18030、BIG5等编码的中文内容时,播放器还是会把它当成ISO-8859-1来读取,乱码就成了必然。
ID3v1中保存的字符串多采用ANSI编码。因此根据系统语言的不同所使用的编码是不同的。如果是简体中文系统使用的是GB2312,繁体中文就是BIG5,日文操作系统下面又是JIS编码。所以,如果MP3中仅有ID3v1的信息,那在不同语言的操作系统中的播放器里面显示的信息会是乱码。
ID3v2-3保存在MP3文件的开头。有标签头和若干标签帧。参考ID3v2-3的标准,在文本标签帧中,在代表帧size的字节后面可以跟一个字节来说明这个帧是使用ISO-8859-1编码还是使用Unicode编码的。如果是使用ISO-8859-1则这个字节为0,如果是使用Unicode则这个字节为1. 使用Unicode Bom ( 0xFF 0xFE ) 开头和两个0 ( 0x00 0x00 )作为结尾。
所以如果要保存中文信息,最好使用ID3v2-3保存Unicode字符串。这样MP3在各个系统下面播放就不会出现乱码的问题了。
2017年11月04日 12点11分 5
level 3
最根本的就是pc端重新填标签
2017年11月04日 23点11分 7
是啊,可是很多人在手机上嫌麻烦
2017年11月05日 00点11分
说对了,复制到歌词那里重新保存即可,
2022年10月26日 15点10分
level 10
重新写一遍标签,而且标签乱糟糟的自己看着都烦吧
2017年11月07日 08点11分 8
是的,标签编辑器批量修改也很方便
2017年11月07日 10点11分
level 15
朱0621 楼主

4. 乱码的解决方案
我们只需要把MP3标签里面用GBK、GB18030、BIG5等编码存储的中文内容修改为Unicode编码,那么基本上所有播放器都能正常识别MP3标签了。考虑到ID3v1从原理上对中文支持就不好,而且标签长度太短,一般应使用ID3v2标签来显示中文信息(支持ID3v2.3的播放器最多)。同时可能需要考虑本地设定的是UTF-8还是UTF-16,一般更改为UTF-16即可;如果使用UTF-8,可以把MP3标签转换为ID3v2.4。
=========
以上转载都是讲解原理,下面才是结合AIMP使用的重点:

Windows版中,可以直接使用AIMP自带的标签编辑器修改标签,或者使用第三方标签编辑工具(如mp3tag)来修改标签;
对于使用CUE的整轨文件,如果遇到乱码现象(使用默认标签编辑后出现乱码),需要将CUE文件的编码格式转换为UTF-8-BOM;
同样,外挂的.lrc歌词文件乱码问题,一样将歌词文件的编码格式转换为UTF-8-BOM.

Android版中,可在设置 - 播放列表 - ANSI标签默认编码里将windows1251更改为GBK,然后下拉刷新播放列表即可。
2018年02月26日 02点02分 11
赞一个,安卓版这个方法可行!
2018年07月31日 14点07分
3.0里头没有GBK啊?
2022年11月28日 04点11分
@promise008 3.20版本以后移除了,所以现在此法无效了
2022年11月28日 04点11分
我的改为gbk后,还要删除播放列表,再重新加载进来才好……
2023年02月15日 11点02分
level 15
朱0621 楼主

乱码的解决方案(补充)
在[2080]版本中,已修复使用 UTF-8 编码的歌词文件或CUE文件在播放器中的显示乱码问题
2018年08月01日 03点08分 12
level 1
厉害了我的大胸滴
2018年08月24日 03点08分 13
level 1
亲测有效!
2018年08月24日 03点08分 14
level 1
我想问一下为什么用mp3tag改好标签后车机播放器不能显示歌曲标签信息
2021年01月14日 07点01分 15
看看其他播放器是否显示正常,不然就是车机播放器的问题,摸清播放器的规则
2021年01月15日 05点01分
level 1
在设置里面信息条里按下面红色线改,就能够显示中文歌曲名称了。
2021年09月24日 05点09分 16
给你点个赞
2022年11月25日 03点11分
level 1
厉害了
2024年09月26日 11点09分 17
level 1
真的有用,顶大神
2024年10月06日 02点10分 18
1 2 尾页