Python 将 unicode 保存为 XML

Posted

技术标签:

【中文标题】Python 将 unicode 保存为 XML【英文标题】:Python saving unicode to XML 【发布时间】:2014-06-07 22:22:57 【问题描述】:

我目前正在编写一个简短的 Python 脚本来遍历服务器上的一些目录,找到我要查找的内容并将数据保存到 XML 文件中。

问题是某些数据是用其他语言编写的,例如“ハローワールド”或类似格式的东西。当尝试将其保存在我的 XML 中的条目中时,我得到以下回溯:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 18: ordinal not in range(128)

这是我保存数据的函数的样子:

def addHistoryEntry(self, title, url):
    self.log.info('adding history entry "title":"%s", "url":"%s"' % (title, url))
    root = self.getRoot()
    history = root.find('.//history')
    entry = etree.SubElement(history, 'entry')
    entry.set('title', title)
    entry.set('time', str(unixtime()))
    entry.text = url
    history.set('results', str(int(history.attrib['results']) + 1))
    self.write(root)

self.getRoot() 如下:

def getRoot(self):
    return etree.ElementTree(file = self.config).getroot()

这里是写入数据的函数 (self.write(root))

def write(self, xmlRoot):
    bump = open(self.config, 'w+')
    bump.write(dom.parseString(etree.tostring(xmlRoot, 'utf-8')).toxml())
    bump.close()

进口是:

import xml.etree.ElementTree as etree
import xml.dom.minidom as dom

如果有人能帮我解决这个问题,请做。 感谢您的帮助。

【问题讨论】:

使用decode('utf-8') 使用codecs.open()-- ***.com/questions/934160/… 【参考方案1】:

你可以使用python的codecs库,用.decode('utf-8')来解决。

import sys,codecs
reload(sys)
sys.setdefaultencoding("utf-8")

【讨论】:

【参考方案2】:

默认情况下,python 会将 unicode 编码为 ASCII。由于 ASCII 仅支持 128 个字符,它会引发超过 128 的异常值。因此解决方案是将您的 unicode 编码为扩展格式,例如 latin1 或 UTF8 或其他 ISO 字符集。我建议用 utf-8 编码。语法是:

u"Your unucode Text".encode("utf-8", "ignore")

给你

title.encode("utf-8", "ignore")

【讨论】:

以上是关于Python 将 unicode 保存为 XML的主要内容,如果未能解决你的问题,请参考以下文章

Python编码

将文件保存为 unicode 的脚本

Python初学--字符串

python - 使用 Django 将 Unicode 字符存储到 MySQL 时出现问题

python学习之基础:编码

python中如何打印或保存unicode编码内容成中文?