Python3 Mutagen没有输出unicode标签

时间:2016-01-14 21:11:41

标签: python python-3.x unicode id3 mutagen

我尝试使用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字符串前缀
  • 使用备用Mutagen标记语法(audio.add(TALB(encoding=3, text=u'test祥さtest'))

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

我使用的是Windows 10 64位。我的Python环境是Anaconda3(Python3.4)和Python2.7,它们在相同的代码中都会产生同样的问题。

1 个答案:

答案 0 :(得分: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参数时,您已强制mutagen 写入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。这有助于确定问题是您编写标签的方式,或者您的播放器是如何阅读标签的。