xml 文件如下:
<?xml version="1.0" ?>
<Floor floorNumber="1" floorRefId="723413320329068590" isOutdoor="false" name="DevNetZone" objectVersion="19">
<Dimension height="16.5" length="81.9" offsetX="0.0" offsetY="0.0" unit="FEET" width="307.0"/>
<Image imageName="domain_0_1421088463647.png"/>
<GPSMarker name="GPS_Marker_17">
<GeoCoordinate latitude="36.125859" longitude="-97.066969" unit="DEGREES"/>
<MapCoordinate unit="FEET" x="0.6" y="0.6"/>
</GPSMarker>
<assign expr="split('�')"/>
</Floor>
程序如下:就是单纯读取一个 xml,再一模一样地写入一个新的 xml 文件里。
from xml.dom.minidom import parse
domTree = parse("test.xml")
with open('new.xml', 'w') as f:
# 缩进 - 换行 - 编码
domTree.writexml(f, addindent=' ', encoding='utf-8')#这里会报错,去掉 encoding 参数也一样
报错信息如下:
UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 7: illegal multibyte sequence
就因为 xml 文件有这么个 FFFD,所以才报错。但现在不知道咋解决。难道应该 parse 函数加个 encoding 参数吗,就不能把这个 FFFD 当成字符串来读取吗。。
各位大佬帮忙看看吧,有点蒙。
1
xiaolinjia 2021-01-13 15:27:53 +08:00
with open('new.xml', 'w', encoding='utf-8') as f:
# 缩进 - 换行 - 编码 domTree.writexml(f, addindent=' ') 打开文件的时候就指定编码吧。 |
2
amiwrong123 OP @xiaolinjia #1
貌似这个 parse 函数,没有这样的参数。。 |
3
xiaolinjia 2021-01-13 15:42:36 +08:00
@amiwrong123 我说的 open 函数啊。
|
4
amiwrong123 OP @xiaolinjia #3
哈哈,不好意思,刚才眼瞎了。谢谢,解决了。 |
5
amiwrong123 OP @xiaolinjia #3
<img src="https://s3.ax1x.com/2021/01/13/sNQ8gJ.png" alt="sNQ8gJ.png" border="0" /> 不对,没有解决。只是回避了问题,现在执行不报错了,但这是因为忽略掉了 utf8 不认识的字符了,现在生成的新文件,变成这个了。 |
6
xiaolinjia 2021-01-13 15:53:46 +08:00
@amiwrong123 可是,'�'本来就是'�'这个吧
|
7
amiwrong123 OP @xiaolinjia #6
好吧,那有点好奇,为啥不是按照'�'来显示,而是直接显示这个特殊字符了。就因为转了一下吗 |
8
ysc3839 2021-01-13 18:19:18 +08:00 via Android
@amiwrong123 你设置了 encoding=utf-8,这个字符能在 utf-8 中表示,所以就不用转义了。
如果一定要转义的话,用 ascii 编码。 |
9
est 2021-01-13 18:20:16 +08:00
gbk 一般都是 windows 搞出来的问题。2333
|
10
amiwrong123 OP @ysc3839 #8
with open('new.xml', 'w',encoding='ascii') as f: # 缩进 - 换行 - 编码 domTree.writexml(f, addindent=' ', encoding='ascii') 这样子,会直接报错的。UnicodeEncodeError: 'ascii' codec can't encode character '\ufffd' in position 7: ordinal not in range(128). |
11
ysc3839 2021-01-13 21:51:47 +08:00
@amiwrong123 那可能是 xml 库不支持?印象中设置成 ascii 编码,就会把非 ascii 字符都转义输出的。
|
12
zyb201314 2021-01-14 11:24:07 +08:00 via Android
#二进制读取.
f=open ("new.xml","wb") for i in open("output.xml","rb"): f.write(i) f.close() |