骡Groovy的字符串替换的有效载荷包含问号

问题描述:

String header = "EXL=TST+​[Placeholder1]​+[Placeholder2]+[Placeholder3]​:[Placeholder2]​" 

header = header.replaceAll("\\[Placeholder1\\]", escapeEdi((String)${propertyVal1})) 
header = header.replaceAll("\\[Placeholder2\\]", escapeEdi((String)${propertyVal2})) 
header = header.replaceAll("\\[Placeholder3\\]", escapeEdi((String)${propertyVal3})) 

println(header) 

String escapeEdi(String target){ 
    StringBuilder result = new StringBuilder(); 
    for(char c : target.toCharArray()){ 
     switch(c){ 
      case '+': 
      case ':': 
      case '\'': 
      case '?': 
       result.append("?"); 
      default: 
       result.append(c); 
     } 
    } 
    return result.toString(); 
} 

利用上述样本代码,我发现了有效载荷结果与在其内很多问号的:骡Groovy的字符串替换的有效载荷包含问号

实施例有效载荷:

EXL=TST+​1+?1234?+1234+123?:123?+?1-1-170101?++?TEST?' 

即使删除escapeEdi函数也会得到完全相同的结果。我甚至不确定是否需要逃生edi,并坦率地说,没有任何价值通过任何这样的字符,纯粹是字母数字。

由于?,它导致消息以UTF-8-BOM发送,并且它们的结尾不是为了处理它而设计的,这意味着它必须在我的结尾被清除并删除。我怎样才能摆脱所有这些?

带空字符串的简单replaceAll不起作用。 试图在结果的末尾逃避Edi()也没有做任何事情,而且我有一个非常类似的脚本,它的工作很好,并没有包含任何愚蠢的字符。什么可能导致这个问题?

+0

即使只是试图打印上自己的占位符似乎的字符串,让我这些“?”有没有可能导致这种情况的特定字符? – Ben

+0

期望的输出是什么? – Rao

有趣的)

下面的代码

String header = "EXL=TST+​[Placeholder1]​+xxx" 
header = header.replaceAll("\\[Placeholder1\\]", "val1") 
println header 

产生

EXL=TST+?val1?+xxx 

,最后我发现有一个奇怪的空间之前,你的源字符串与UNI在[]后 - 代码值(8203)

它是Unicode Character 'ZERO WIDTH SPACE' (U+200B)

看到的截图绿色:

enter image description here

+0

在阅读本文之前,我发现了一个艰难的方式,最终用?s来复制整个结果,用空字符串替换s,然后将它们重新插入以使其运行。真的做得好,巧妙地发现 - 是Notepad ++吗?你是怎么让他们展示出来的? – Ben

+1

是的,它是记事本++屏幕/但我在“远程管理器编辑器”中检测到符号。通常当关于真实字符和字节的问题 - 对我来说最好=) – daggett