Android 音乐 ID3 标签乱码初探

1 · LY · May 12, 2024, 4 p.m.
Summary
前言 首先讲点背景。我平时从网易云音乐的Arcaea (韵律源点) 主播电台下一些音乐,用音乐标签修正封面、专辑、作者、文件名等信息。但在标题含带音符的拉丁文小写字母(比如Dynitikǒs)的时候,专辑Arcaea (韵律源点)就会显示为Arcaea (韵律æº�点)这样的乱码,但在删掉音符后就正常了。在我印象里ID3v2是有记录文本编码的区域的,于是就想去看看这个bug根源在哪里。 这个bug还有一些更离奇的变种,即改变某个标签中的字符位置也可能改变另一个标签的读取编码,如图所示。 分析 首先打开在线乱码恢复,可以看到这个乱码出现的原因是将UTF-8字节序列以Windows-1252或者ISO-8859-1读取。 然后安装python-mutagen和eyeD3(如果只是平时简单查看的话,exiftool或ffmpeg也可以),通过mid3v2 --list-raw等命令确认现有ID3标签版本及每个标签的文本编码。我的文件中的对应标签均为UTF16,并且能被这些软件正确解析。 众所周知Android系统所有音乐是由媒体库进行索引、解析元信息的,因此查看/data/da...