微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java-通过Web服务和可能包含非法字符的XML发送UTF-8字符串

如何解决Java-通过Web服务和可能包含非法字符的XML发送UTF-8字符串

|| 我有一个用Java编写的Web服务。我想以XML文件的形式发送一些字符串。但是这些字符串可能包含一些在XML中被视为非法的字符。目前,我将它们全部替换为?,创建XML并将其通过网络发送到(Silverlight应用)。但是有时候我得到的只是问号!因此,我想以某种方式对这些字符串进行编码/解码,然后再发送它们以获取准确的字符串。这些字符串采用UTF-8编码。我正在使用类似这样的东西来创建XML
try{
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

    //root elements
    Document doc = docBuilder.newDocument();
    Element rootElement = doc.createElement(\"SearchResults\");
    rootElement.setAttribute(\"count\",Integer.toString(total));
    doc.appendChild(rootElement);

    for(int i = 0; i < results.size(); i++)
    {
        Result res = results.get(i);
        //title
        Element title = doc.createElement(\"Title\");
        title.appendChild(doc.createTextNode(res.title));
        searchRes.appendChild(title);

        //...
    }
    //write the content into xml file
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
    StringWriter sw = new StringWriter();
    StreamResult result =  new StreamResult(sw);
    transformer.transform(source,result);
    String ret = sw.toString();
    return ret;
}
catch(ParserConfigurationException pce){
    pce.printstacktrace();
}catch(TransformerException tfe){
    tfe.printstacktrace();
}
return null;
谢谢。 PS: 有人说他们不理解我的问题,所以也许我说的不对,所以我尝试用一​​个例子来澄清它。 假设我有一系列物品。 每个项目有3个字符串。 这些字符串是UTF-8字符串(来自多种语言)。 我想通过Java中的Web服务将这些字符串发送到客户端。 客户端部分是Silverlight。在Silverlight应用中, 我得到XML,对其进行解析,并使用LinQ从中提取数据,然后在Silverlight应用程序中使用该数据。 当我尝试转义字符时,以某种方式,Silverlight中的解析器抛出异常,指出在调试后源字符串(XML字符串)中存在非法字符,我发现实际上存在非法字符,但是我没有\不知道如何产生保证的合法XML字符串。 编辑: 谢谢大家的支持。我真的很感激。 我解决了我的问题。 原来在我的代码中的某个地方,我正在生成一个非法字符并将其附加到我的结果字符串中。 问题仍然存在(即使我向其提供了一些非法字符,我如何也可以产生合法的XML文件-请注意,我通过在产生XML之前消除了非法字符来解决了这一问题,所以我仍然想知道我是否想要某种方式发送过来?),但由于我的问题已经解决,并且这里有很多答案,我想未来的读者将有一个领先的起点,开始着手解决这个问题。 我没有时间,但是我相信这些会有所帮助。 有很多答案和帮助,所以我无法选择其中之一作为我的特定答案。 但是我必须选择其中之一。 我衷心感谢所有答复。     

解决方法

如果您要以XML发送非字符数据(例如二进制数据),则可以使用Base64对其进行编码。但是我不确定我是否正确理解了您的问题。 也许您只是忘了使用ѭ1来将您的XML编码为UTF-8。     ,不确定我是否理解您的问题,但是也许您应该将数据包装在
CDATA
标记下,以免XML解析器对其进行解析。这是来自MSDN的文档。     ,用
<![CDATA[
]]>
包裹内容。 此处提供更多信息:http://www.w3schools.com/xml/xml_cdata.asp     ,根据经验,我建议对XML进行转义/转义。 看一下Apache Commons Lang的StringEscapeUtils。     ,您应该尝试来自Apache的StringEscapeUtils     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。