2013-05-29 41 views
1

即时通讯发送XML和HttpPost到服务器。这用于罚款,并即时在项目的其他部分成功做到。StringBuilder附加字符串中断UTF 8

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

林:

Invalid byte 2 of 2-byte UTF-8 sequence. 

当我登录请求并在w3c xml validator中检查它是否没有错误。
这是摘录(整体法将大并有敏感数据)从我的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>"); 
     ... 

我替换字符串瓦尔我追加与硬编码字符串,一切工作正常

baseDocument.append(name); 

baseDocument.append("name"); 

所有的字符串都有值,它们都不为空或为空!
我设置StringEntity请求为xml

se.setContentType("application/xml"); 

我失去了什么之前?!?

回答

1

你的XML标题宣称它是UTF-8,但你从来没有提到,如果你真的 UTF-8。确保您发送的实际字节是UTF-8编码的。错误消息表明您正在使用其他编码(可能是ISO-8859- *变体)。

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

和否:StringBuilder肯定不会中断UTF-8。问题在别的地方。

+0

好thx,会做。但是,当我像我的例子中那样硬编码字符串时,Homecome会起作用吗? – M4tchB0X3r

+0

如果你发送''name''然后使用ISO-88591- *不是问题,因为UTF-8编码和该字符串的ISO-8859-1编码是相同的! (对于所有可用ASCII编码的字符串都是如此)。只有使用非ASCII字符(如ä,ö,ß和一些标点符号)才会有区别。 –

+0

甜,thx。将UTF-8参数传递给StringEntity的确有窍门。 'se = new StringEntity(reqString,“UTF-8”);'由于该应用程序将用于奥地利,因此会有变音符号。我从您的姓名中取出您的姓名,或者来自Ger或At;) – M4tchB0X3r