我有一个C程序,它发送如下XML字符串:
<?xml version="1.0" encoding="utf-16" standalone="no"?>
<ScoreList>
<Player UserName="Player1" Score="10" />
<Player UserName="Player2" Score="20" />
</ScoreList>
但是当我在Python程序中收到它时
b'<?xml version="1.0" encoding="utf-16" standalone="no"?>
\r\n<ScoreList>\r\n
<Player UserName="Player1" Score="10" />
\r\n <Player UserName="Player2" Score="20" />
\r\n</ScoreList>'
我把它发送到一个服务器上,代码是C
Byte[] sendBytes = Encoding.BigEndianUnicode.GetBytes(doc);
netStream.Write(sendBytes, 0, sendBytes.Length);
并在Python(版本3.5)端接收此代码
self.data = self.request.recv(1024).strip()
当我试图用这个代码解析它时
tree = ET.fromstring(self.data)
我得到一个错误:
File "<string>", line None
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1,
column 1
任何关于我哪里出了问题或者我可以尝试解决这个问题的建议。你知道吗
看起来好像是在代码的某个地方对
str
实例调用bytes
。你知道吗考虑以下xml片段:
如果它是通过网络发送的,则必须将其编码为字节。你知道吗
ElementTree将按原样接受UTF-8编码的字节,或者您可以在将它们传递给ElementTree之前对它们进行解码:
但是,如果对字节调用
str
,则会得到字节的repr,其中包括前导的b
:ElementTree将不接受此输入:
要解决这个问题,您需要了解
self.data
是如何构造的。确保对接收的字节调用decode()
,而不是str()
。你知道吗相关问题 更多 >
编程相关推荐