问题是,你不小心改变的编码word/document.xml
在template2.docx
。word/document.xml
(来自template.docx
)最初被编码为UTF-8(这是XML文档的默认编码)。
xmlString = zip.read("word/document.xml").decode("utf-8")
但是,当您复制它时,会将template2.docx
编码更改为 CP-1252 。根据有关的文档open(file, "w")
,
在文本模式下,如果未指定编码,则使用的编码取决于平台:调用locale.getpreferredencoding(False)以获取当前的语言环境编码。
您指示调用locale.getpreferredencoding(False)
给您正在编写cp1252
的编码word/document.xml
。
由于您没有显式添加<?xml version="1.0" encoding="cp1252"?>
到的开头word/document.xml
,因此Word(或任何其他XML读取器)会将其读取为 UTF-8 而不是 CP-1252 ,这将导致出现非法的XML字符错误。
因此,您要在写入时通过使用参数指定为 UTF-8 的编码:encoding``open()
with open(os.path.join(tmpDir, "word/document.xml"), "w", encoding="UTF-8") as f:
f.write(xmlString)