StringBuilder追加字符串中断UTF 8

时间:2013-05-29 13:14:23

标签: android utf-8 stringbuilder

我将带有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");

我错过了什么?!?

1 个答案:

答案 0 :(得分:1)

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

这是手动构建这样的XML的另一个原因是危险的:需要观察太多的角落情况,并且使用真正的XML处理库要容易得多。那些倾向于以使角落案件正确; - )

不,StringBuilder肯定不会破坏UTF-8。问题出在其他地方。