0

我正在尝试使用 Mutagen 自动化一些 ID3 标记,但是每当我尝试插入 unicode 字符时,我都会将它们替换为问号。

导致此错误的最小测试代码如下

from mutagen.id3 import ID3, TALB

audio = ID3()
audio['TALB'] = TALB(encoding=3, text=u'test祥さtest')
audio.save('test.mp3', v1=2)

运行时,test.mp3 的专辑标签显示test??test在我的文件管理器和音乐播放器中。如果我通过文件管理器手动输入 unicode 标签,则 unicode 字符会正常显示而不会出现问题。

为了解决这个问题,我已经尝试过的事情:

  • 尝试使用和不使用u字符串前缀
  • 使用备用诱变剂标记语法 ( audio.add(TALB(encoding=3, text=u'test祥さtest')))

我正在使用函数的v1=2参数,save因为将其排除在外会导致大约一半的文件没有写入标签(并且 unicode 仍然作为问号输出),并且其他值拒绝为任何文件写入 ID3 标签。


我正在使用 Windows 10 64 位。我的 Python 环境是 Anaconda3 (Python3.4) 和 Python2.7,两者都会导致相同的代码出现相同的问题。

4

1 回答 1

2

所以我认为你的主要问题是你测试标签是否正确的方式有一些问题。让我解释。

对我来说,这段代码有效:

from mutagen.id3 import ID3, TALB

audio = ID3()
audio['TALB'] = TALB(encoding=3, text=u'test祥さtest')
audio.save("test.mp3",v1=0)

在文本编辑器中检查文件会显示以 unicode 正确编写的标签。

那为什么看不到标签呢?可能是因为 mutagen 默认写入 ID3v2.4 标签,Windows 文件资源管理器和任何标准 Windows 媒体播放器都不会读取这些标签。但是,当您添加v1=2参数时,您已强制诱变剂写入 ID3v1 标记。这些文件资源管理器可以读取,但不幸的是不支持 Unicode。这就是为什么您看到的是问号。因此,当您想使用 Unicode 时,添加v1=0(正如我所做的)以防止写入任何 ID3v1 标记并分散对使 ID3v2 标记工作的主要问题的注意力,这对我们很有用。

所以现在移到 ID3v2.3 而不是 ID3v2.4 看看是否有帮助:

from mutagen.id3 import ID3, TALB

audio = ID3()
audio.update_to_v23()
audio['TALB'] = TALB(encoding=3, text=u'test祥さtest')
audio.save("test.mp3",v1=0,v2_version=3)

最后,查看文件中真正的标签的最佳方法是使用全面遵循规范的专用标签编辑器,例如 Mp3tag。这有助于找出问题是您如何编写标签,还是您的播放器如何阅读它们。

于 2016-02-27T08:25:58.527 回答