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

更新Emby格式NFO文件时日文标题乱码问题求助

更新Emby格式NFO文件时日文标题乱码问题求助

嗨,我之前也踩过类似的编码坑!你的问题核心是Python的xml.etree.ElementTree在写入XML时的编码处理细节没把控好,导致日文UTF-8字符被错误转码成了乱码。

问题原因

虽然你在tree.write()里指定了encoding="utf-8",但默认情况下这个方法可能会受到系统默认文本编码的干扰,把原本正确的Unicode日文字符串转换成了错误的字节序列,最终就出现了你看到的乱码。

解决方法

从读取和写入两个环节都明确锁定UTF-8编码,同时用二进制模式写入文件彻底避免编码转换问题。修改后的完整脚本如下:

import xml.etree.ElementTree as ET

title = "千と千尋の神隠し"
filename = "movie.nfo"

# 读取NFO时明确指定UTF-8编码,避免读取原文件时的编码偏差
parser = ET.XMLParser(encoding='utf-8')
tree = ET.parse(filename, parser=parser)
root = tree.getroot()

# 替换标题文本
title_elem = root.find("title")
title_elem.text = title

# 用二进制模式打开文件,强制以UTF-8编码写入,彻底避免系统编码干扰
with open(filename, 'wb') as f:
    tree.write(f, encoding='utf-8', xml_declaration=True, method='xml')

关键改动说明

  1. 读取阶段:使用ET.XMLParser(encoding='utf-8')解析文件,确保原NFO的UTF-8编码被正确识别,避免读取时的隐式编码转换。
  2. 写入阶段:
    • 用open(filename, 'wb')二进制模式打开文件,跳过Python文本模式下的自动编码转换。
    • 调用tree.write()时明确指定encoding='utf-8'和method='xml',让ElementTree直接将Unicode字符串编码为UTF-8字节写入文件。

运行这个修改后的脚本,再打开NFO文件就能看到正常的日文标题了,Emby扫描后也能正确识别显示。

备注:内容来源于stack exchange,提问作者calvin724

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:39:05