【发布时间】:2018-04-11 08:31:10
【问题描述】:
我收到一个以 UTF8 编码的带有incoming orders 的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Beleg xmlns="http://www.mauve.eu/MauveXml/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mauve.eu/MauveXml/2.0/ http://download.mauve.eu/schema/MauveXml_2_0.xsd"
>
我运行 Python 3.6 脚本将此 XML 文件转换为 CSV 文件。 在脚本中的命令是
soup = BeautifulSoup(open(xmlfile, encoding = 'utf-8'), 'xml')
98% 的情况下,完整的脚本都运行良好。
但是,对于某些 XML 文件,它在我手动更改文本字符之前不起作用,例如:ğ、ě 等。
错误如下:
Traceback (most recent call last):
File "C:\Modification Python Scripts\Python Script23\test5\New Folder\xmlconvert-final.py", line 180, in <module>
convertXMLtoCSV(xmlfile,path)
File "C:\Modification Python Scripts\Python Script23\test5\New Folder\xmlconvert-final.py", line 152, in convertXMLtoCSV
outputwriter.writerow(i)
File "C:\Python36\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u202d' in position 83: character maps to <undefined>
有什么想法吗?
【问题讨论】:
-
'\u202d' 是 Unicode LEFT-TO-RIGHT OVERRIDE,而不是
"╩" -
U+202D 不是您显示的字符,它是Left-to-right Direction Override。我希望看到一个完整的工作示例,包括一个引发此错误的 XML 文件。
-
@Duncan link 在编码部分是
How to type in Microsoft Windows Alt +202D -
编辑并删除了该错误。 @usr2564301 我无法发布 XML 文件,它是私有数据,不用于公开展示。你所说的工作示例是什么意思?在所有其他 XML 文件中,该脚本都可以正常工作。
-
您在 Windows 中显示的字符是代码页 437 中的字符 202。在 Unicode 中,这将是字符
"\u2569"。发生的事情是您的 Alt 键序列只使用了 202 而忽略了其余的。无论如何,关键是你有一个给你带来问题的角色 u202d。
标签: xml python-3.x csv character-encoding