我将带有HttpPost的XML发送到服务器。这曾经很好,并且我在项目的其他部分成功地做了它。
我使用StringBuilder创建xml请求,但由于我将字符串作为Data附加到节点,我从服务器上的解析器收到错误响应:
Invalid byte 2 of 2-byte UTF-8 sequence.
当我记录请求并在w3c xml验证器中检查它时,没有错误 这是我的Stringbuilder方法的摘录(整个方法将是大而且具有敏感数据):
StringBuilder baseDocument = new StringBuilder();
baseDocument.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><setDisposalRequest><customer><company><![CDATA[");
baseDocument.append(company);
baseDocument.append("]]></company>");
baseDocument.append("<firstName><![CDATA[");
baseDocument.append(name);
baseDocument.append("]]></firstName>");
...
一旦我替换了String vars,我附加了硬编码的字符串,一切正常
即
baseDocument.append(name);
到
baseDocument.append("name");
所有字符串都有值,非值为null或为空! 在请求之前,我将StringEntity设置为xml
se.setContentType("application/xml");
我错过了什么?!?
答案 0 :(得分:1)
您的XML标头声称它是UTF-8,但您从未提及您是否实际写 UTF-8。确保您发送的实际字节是UTF-8编码的。错误消息表明您正在使用其他编码(可能是ISO-8859- *变体)。
这是手动构建这样的XML的另一个原因是危险的:需要观察太多的角落情况,并且使用真正的XML处理库要容易得多。那些倾向于以使角落案件正确; - )
不,StringBuilder
肯定不会破坏UTF-8。问题出在其他地方。