1

我将带有 HttpPost 的 XML 发送到服务器。这曾经很好,我在项目的其他部分成功地做到了。

我使用 StringBuilder 创建 xml 请求,但由于我将字符串作为数据附加到节点,我从服务器上的解析器收到错误响应:

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>");
        ...

一旦我用硬编码的字符串替换了我附加的字符串变量,一切正常

IE

baseDocument.append(name);

baseDocument.append("name");

所有的字符串都有值,它们都不是 null 或者是空的!
在请求之前我将 StringEntity 设置为 xml

se.setContentType("application/xml");

我错过了什么?!?

4

1 回答 1

1

您的 XML 标头声称它是 UTF-8,但您从未提及您是否真的编写了 UTF-8。确保您发送的实际字节是 UTF-8 编码的。该错误消息表明您正在使用另一种编码(可能是 ISO-8859-* 变体)。

这是像这样手动构建 XML 很危险的另一个原因:有太多的极端情况需要观察,而且使用真正的 XML 处理库要容易得多。那些倾向于使极端情况正确;-)

不:StringBuilder当然不会破坏 UTF-8。问题出在其他地方。

于 2013-05-29T13:25:40.120 回答