【问题标题】:Reading diacritical marks from a file and inserting them to an XML从文件中读取变音符号并将它们插入到 XML
【发布时间】:2015-06-29 05:05:21
【问题描述】:

我目前正在尝试从某些文件中读取名称并将它们插入到 XML 中。一切都很顺利,直到其中一个名字包含一个变音符号,然后某个字母被插入到我的中间字典中作为\xc4\x82C,或类似的东西。更重要的是,当我尝试从上述词典中插入带有变音符号的单词时,它会发出错误信号:

所有字符串必须与 XML 兼容:Unicode 或 ASCII,无 NULL 字节或控制字符

所以我既不接受 Python 也不接受 XML 之类的变音符号。我的文件都包含很多变音符号,我宁愿避免删除它们,因为在我的国家,有些名字只是变音符号不同。

有没有办法解决这个问题?

【问题讨论】:

  • 您使用的是哪个 Python 版本和哪个 XML 工具包? Unicode 处理在 Python 2 和 3 之间大相径庭。
  • 我使用的是 python 2.7.8,至于 XML 工具包,我真的不知道。我使用 LXML 读取和写入 xml 文件。

标签: python xml io diacritics


【解决方案1】:

据我了解,您将文件中的数据加载到 Python 2.7 str 中。在仅表示为字节的 Python 2.7 中,没有附加信息这些字节应该实际表示什么字符。

您的 XML 工具包拒绝猜测,它只接受 ASCII 字符,其中映射非常清晰(即字节 0-127)。因此,您必须将您的 str 解码为 unicode 对象:

ustr = data.decode(encoding)

然后您可以将新的ustr 传递给 LXML。要确定您需要哪种编码,您应该查看您的数据。根据您的数据来自世界的哪个地方,我会先进行一些猜测,例如'latin1''utf-8'。您可以同时尝试两种方法,看看哪一种能达到预期效果。

如果您在 Windows 上进行开发,最好在 IDLE Python 或其他 IDE 中执行此操作,Windows 控制台在 unicode 方面非常有限。

【讨论】:

  • 好吧,基本上我是这样做的:student = etree.Element('student', OrderedDict([("nume",Studenti[key][0].decode("utf-8")), ("prenume",Studenti[key][1].decode("utf-8")),("nr_matricol",str(key)),("medie",Studenti[key][2])])) .我放了 utf-8 因为那是文件的编码,我从中取名字。现在它向我发出一个错误信号:UnicodeDecodeError: 'utf8' codec can't decode byte 0xce in position 5: invalid continuation byte.
  • 使用“latin1”解码它实际上可以工作,只是它插入像 \xc4\x82C 这样的变音符号而不是变音符号
  • 显然我的编码应该是 Windows-1250 或 ISO 8859-2。两者都试过了,它只能代替它放置字符代码的变音符号。例如:“BĂBĂIŢĂ”->“BÄ‚BÄ‚IŢĂ”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2011-08-30
  • 2017-05-24
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多