更新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')
关键改动说明
- 读取阶段:使用
ET.XMLParser(encoding='utf-8')解析文件,确保原NFO的UTF-8编码被正确识别,避免读取时的隐式编码转换。 - 写入阶段:
- 用
open(filename, 'wb')二进制模式打开文件,跳过Python文本模式下的自动编码转换。 - 调用
tree.write()时明确指定encoding='utf-8'和method='xml',让ElementTree直接将Unicode字符串编码为UTF-8字节写入文件。
- 用
运行这个修改后的脚本,再打开NFO文件就能看到正常的日文标题了,Emby扫描后也能正确识别显示。
备注:内容来源于stack exchange,提问作者calvin724
相关产品推荐
相关产品推荐

