骡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()也没有做任何事情,而且我有一个非常类似的脚本,它的工作很好,并没有包含任何愚蠢的字符。什么可能导致这个问题?
答
有趣的)
下面的代码
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)
看到的截图绿色:
即使只是试图打印上自己的占位符似乎的字符串,让我这些“?”有没有可能导致这种情况的特定字符? – Ben
期望的输出是什么? – Rao