【问题标题】:Java - escape sequences lostJava - 转义序列丢失
【发布时间】:2012-12-23 15:07:10
【问题描述】:

Java 中的转义序列有问题。 我正在调用一个 Web 服务女巫,它接受一些字符串参数和一个字节 [] 参数,并返回字节 []。 当我收到那个字节[]时,我把它写到文件中并用一些文本打开那个文件 Open Office 等编辑器。 一切看起来都很好,但是我的 \n 和 \t 被替换为空格(“”)。 以前使用过这个网络服务的人说,如果我用字符 
 替换我的 \n 和 \t 它将起作用,但它仍然不起作用。

我几乎尝试了我在谷歌上找到的所有东西来解决这个问题,但仍然没有解决它。 我仍然认为网络服务很好,这取决于我将发送什么而不是我的换行符和制表符,但我不知道是否有任何其他字符组合可以正确替换我的 \n 和 \t。

我很难在这里提出正确的问题,因为我看不到 Web 服务的实现。 也许我发送的 SOAP 消息做了一些转换? 或者还有其他类似的东西:

String replaceString = myString.replace("\\n", "
");

还是我做错了?

编辑:

解决方案应如下所示:

https://github.com/NetAngels/django-webodt/issues/10

但即使这样仍然没有帮助我。

提前致谢。

更新: 我正在发送一个空的openOffice .odf file (byte[])、几个包含登录用户的用户名的字符串等,以及一个包含来自我在表单上的文本字段中的所有用户输入的 HashMap。在该文本字段中,用户经常输入换行符或制表符,当所有内容通过 Web 服务合并时,换行符和制表符被替换为空格。 Web 服务运行良好,我可以完全访问它。 Web 服务方法的返回是 byte[] 代表填充的 .odt 文件。

【问题讨论】:

  • 向我们展示您的代码。如果您收到字节,您应该直接将它们写入文件,而不是将任何内容转换为字符串。 byte[] 用于二进制数据。
  • 当我收到 byte[] 时,我没有将任何内容转换为字符串。我发送到 Web 服务的字符串和字节 [] 以某种方式合并,但该合并不能很好地附加 \n 和 \t。所以,我正在替换我发送的字符串。
  • 这是一件好事,但是您仍然没有显示您的代码,因此仍然无法找到其中可能存在的问题。
  • 好吧,我现在没有源代码,但我明天会发布。但重点是我有一些字符串,它们包含转义字符,然后我用这些字符串作为参数和一个 byte[] 参数调用 Web 服务。我正在尝试使用该字符串上的 replace/replaceAll 方法来保存我的转义序列,但仍然没有成功。
  • 您可能无法访问 Web 服务,但您似乎知道它应该做什么。您能否描述一下您要发送到 Web 服务的内容、您期望返回的字节数组包含的内容以及它实际包含的内容?

标签: java soap escaping


【解决方案1】:

我发现真正的问题出在网络服务中。 Web 服务上的 XML 编写器总是对 &, <, > 等字符进行转义。而不是获取序列 

 我得到序列 
 女巫不是换行符。当我打开我的 .odt 文件时会显示这些字符,因为这个 &,但是当我手动将它们替换为原始 
 时,它们现在会显示并出现换行符。

我试图将这个
 放在CDATA 标记中,但是事件CDATA 的大括号<><> 转义了所以,在这种情况下,即使CDATA 也没有被正确解释。

【讨论】:

    【解决方案2】:

    \\n 是错误的。你应该使用\n。 因为第一个是字符'\'后跟n,第二个是字符 '\n' 换行

    【讨论】:

    • 请添加一些解释。您也可以仔细检查您的格式,我不确定答案是否按照您的预期呈现。看看这里stackoverflow.com/editing-help
    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多