Python脚本没有';t将汉字写入XML文件

Python脚本没有';t将汉字写入XML文件,python,xml,Python,Xml,我正在为一个游戏制作一个mod,其中大部分文件是XMLs,文本是简体中文。我的目标是用繁体中文替换文件中的所有简体中文,然后是英文翻译。我正在使用谷歌的云翻译API来完成这一部分,一切都很好。起初,我只是对中文文本进行查找和替换,然后在字符串末尾添加英文,但问题是,每当中文文本出现不止一次时,我就会得到额外的英文翻译 为了解决这个问题,我阅读了更多关于Python的XML文档,并开始尝试使用tree.write,但这正是我陷入困境的地方。当我使用它时,XML文件中包含了汉字的UTF代码,而不是实

我正在为一个游戏制作一个mod,其中大部分文件是XMLs,文本是简体中文。我的目标是用繁体中文替换文件中的所有简体中文,然后是英文翻译。我正在使用谷歌的云翻译API来完成这一部分,一切都很好。起初,我只是对中文文本进行查找和替换,然后在字符串末尾添加英文,但问题是,每当中文文本出现不止一次时,我就会得到额外的英文翻译

为了解决这个问题,我阅读了更多关于Python的XML文档,并开始尝试使用tree.write,但这正是我陷入困境的地方。当我使用它时,XML文件中包含了汉字的UTF代码,而不是实际字符。如果我在web浏览器中打开该文件,角色将正确呈现,但此时我不确定如果他们没有正常写入XML,他们是否仍能在游戏中工作

下面是我正在使用的一个XML示例:

<Texts Type="Story">
  <List>
    <Text Name="TradeAuction">
      <DisplayName>拍卖会</DisplayName>
      <Desc>[NAME]来到了[PLACE],发现此地有个拍卖行。</Desc>
      <Selections.0.Display>参与拍卖</Selections.0.Display>
      <Selections.1.Display>离去</Selections.1.Display>
    </Text>
  </List>
</Texts>
其输出如下所示:

<Texts Type="Story">
  <List>
    <Text Name="TradeAuction">
      <DisplayName>拍賣會(auctions)</DisplayName>
      <Desc>[NAME]來到了[PLACE],發現此地有個拍賣行。([NAME] came to [PLACE] and found an auction house here.)</Desc>
      <Selections.0.Display>參與拍賣(Participate in the auction)</Selections.0.Display>
      <Selections.1.Display>離去(Leave)</Selections.1.Display>
    </Text>
  </List>
</Texts>
<Texts Type="Story">
  <List>
    <Text Name="TradeAuction">
      <DisplayName>&#25293;&#36067;&#26371;(auctions)</DisplayName>
      <Desc>[NAME]&#20358;&#21040;&#20102;[PLACE]&#65292;&#30332;&#29694;&#27492;&#22320;&#26377;&#20491;&#25293;&#36067;&#34892;&#12290;([NAME] came to [PLACE] and found an auction house here.)</Desc>
      <Selections.0.Display>&#21443;&#33287;&#25293;&#36067;(Participate in the auction)</Selections.0.Display>
      <Selections.1.Display>&#38626;&#21435;(Leave)</Selections.1.Display>
    </Text>
  </List>
</Texts>
它的输出如下所示:

<Texts Type="Story">
  <List>
    <Text Name="TradeAuction">
      <DisplayName>拍賣會(auctions)</DisplayName>
      <Desc>[NAME]來到了[PLACE],發現此地有個拍賣行。([NAME] came to [PLACE] and found an auction house here.)</Desc>
      <Selections.0.Display>參與拍賣(Participate in the auction)</Selections.0.Display>
      <Selections.1.Display>離去(Leave)</Selections.1.Display>
    </Text>
  </List>
</Texts>
<Texts Type="Story">
  <List>
    <Text Name="TradeAuction">
      <DisplayName>&#25293;&#36067;&#26371;(auctions)</DisplayName>
      <Desc>[NAME]&#20358;&#21040;&#20102;[PLACE]&#65292;&#30332;&#29694;&#27492;&#22320;&#26377;&#20491;&#25293;&#36067;&#34892;&#12290;([NAME] came to [PLACE] and found an auction house here.)</Desc>
      <Selections.0.Display>&#21443;&#33287;&#25293;&#36067;(Participate in the auction)</Selections.0.Display>
      <Selections.1.Display>&#38626;&#21435;(Leave)</Selections.1.Display>
    </Text>
  </List>
</Texts>

拍賣會(拍卖)
[姓名]和#20358到了[地点]及65292 ;發現此地有個拍賣行。([姓名]来到[地点]并在这里找到一家拍卖行。)
參與拍賣(参加拍卖)
離去(离开)
任何帮助都将不胜感激。我想,一旦我弄明白了这一点,我就应该能够顺利完成剩下的翻译工作

tree.write('/home/dave/zh-TW-final/Settings/MapStories/MapStory_Auction.xml')
根据:

write(文件,encoding=“us ascii”,xml\u声明=None,默认名称空间=None,method=“xml”,*,short\u empty\u elements=True)

输出为字符串(str)或二进制(字节)。这由编码参数控制。如果编码为“unicode”,则输出为字符串;否则,它是二进制的。请注意,如果是打开的文件对象,则这可能与文件类型冲突;确保不要尝试将字符串写入二进制流,反之亦然

因此,我们只需要适当地设置
编码
参数。以ASCII格式写入意味着需要对非ASCII字符进行实体转义(
拍;
等)(当然,它仍然可以毫无问题地写入文件,因为为文件指定的UTF-8编码是ASCII透明的。)