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

标签 c# java .net web-services 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 之前消除非法字符解决了问题,所以我仍然想知道如果我想以某种方式发送怎么办?结束了吗?)但是由于我的问题已经解决并且这里有大量答案,我想 future 的读者已经开始了面对这个问题的旅程。
我没有时间,但我相信这些会有所帮助。
有很多答案和帮助,因此我无法选择其中之一作为我的具体答案。
但我必须选择其中之一。
我真诚地感谢所有的回复。

最佳答案

如果您在 XML 中发送非字符数据(例如二进制数据),您可以使用 Base64 对它们进行编码。但我不确定我是否正确理解了你的问题。

也许您只是忘记使用 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8") 将 XML 编码为 UTF-8

关于c# - Java - 通过 Web 服务和 XML 发送可能包含非法字符的 UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5681279/

相关文章:

c# - 如何将 OGG 音频文件打包到 RIFF 容器?

Java搜索输入

c# - WPF 绑定(bind)不更新 XAML 但调用了 PropertyChanged

c# - 从按下的按钮获取返回值

c# - msbuild 使用了错误的程序集名称

c# Elements of elements 使用 XElement

c# - WF4工作流服务和 Entity Framework 问题

java - 从接口(interface)文件生成包装器时 Swig #define 错误

java - 使用 gitlab-ci 进行 GUI 测试(java swing)时出现 headless (headless)异常

c# - Entity Framework 、LINQ 和填充父模型及其子模型