You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理使用mutagen写入日文标签时触发的UnicodeEncodeError错误

解决方案

错误原因

该UnicodeEncodeError由两个核心问题触发:

  • MP3的旧版ID3标签(ID3v2.3及更早版本)默认仅支持Latin1或UTF-16编码,默认配置下mutagen会用不支持日文的Latin1编码写入标签,导致编码失败
  • Windows系统默认字符编码为GBK(cp936,属于charmap编码集),未包含对应日文字符的映射,也会触发该类报错

修复代码

你仅需要修改addTag函数的内部逻辑即可,无需改动下方不受控制的业务代码:

import mutagen

def addTag(fpath, title, albumName):
    audio = mutagen.File(fpath, easy=True)
    # 避免重复添加标签报错
    if audio.tags is None:
        audio.add_tags()
    audio['title'] = title
    audio['album'] = albumName
    # 保存时指定ID3v2.4版本,强制用UTF-8编码写入标签,完美支持日文字符
    audio.save(fpath, v2_version=4, encoding=3)

参数说明:

  • v2_version=4指定使用ID3v2.4版本标签,该版本原生支持UTF-8编码
  • encoding=3对应UTF-8编码,是目前兼容性最好的Unicode编码方案

兼容旧设备方案

如果你的标签需要在不支持ID3v2.4的旧播放器/设备上读取,可以改成使用ID3v2.3版本+UTF-16编码:

audio.save(fpath, v2_version=3, encoding=1)

额外Windows环境适配

如果修改代码后仍触发该报错,可在脚本最开头添加以下代码,强制Python标准输出/错误流使用UTF-8编码:

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')

也可以在运行脚本前,先在CMD中执行set PYTHONUTF8=1再启动Python脚本,效果一致。


内容的提问来源于stack exchange,提问作者new_buffer_overflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:15:03