Mule Groovy 字符串替换负载包含问号
Mule Groovy string replace payload contains question marks
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();
}
使用上面的示例代码,我得到的负载结果中有很多问号:
有效负载示例:
EXL=TST+1+?1234?+1234+123?:123?+?1-1-170101?++?TEST?'
即使删除 escapeEdi 函数也会得到完全相同的结果。我什至不确定是否需要转义 edi,坦率地说 none 传递的值有任何这样的字符,纯字母数字。
由于 ?,它导致消息使用 UTF-8-BOM 发送,而他们的终端并非旨在处理它,这意味着它必须在我这一端被清除和删除。我怎样才能摆脱所有这些?
带有空字符串的简单 replaceAll 不起作用。
在结果末尾尝试 escapeEdi() 也没有做任何事情,而且我有一个与此非常相似的脚本,它工作得很好,不包含愚蠢的角色。可能导致此问题的原因是什么?
有趣的事)
下面的代码
String header = "EXL=TST+[Placeholder1]+xxx"
header = header.replaceAll("\[Placeholder1\]", "val1")
println header
生产
EXL=TST+?val1?+xxx
最后我发现在你的源字符串中 []
前后有一个奇怪的空格,其 uni-code 值为 (8203)
并且是Unicode Character 'ZERO WIDTH SPACE' (U+200B)
见绿色截图:
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();
}
使用上面的示例代码,我得到的负载结果中有很多问号:
有效负载示例:
EXL=TST+1+?1234?+1234+123?:123?+?1-1-170101?++?TEST?'
即使删除 escapeEdi 函数也会得到完全相同的结果。我什至不确定是否需要转义 edi,坦率地说 none 传递的值有任何这样的字符,纯字母数字。
由于 ?,它导致消息使用 UTF-8-BOM 发送,而他们的终端并非旨在处理它,这意味着它必须在我这一端被清除和删除。我怎样才能摆脱所有这些?
带有空字符串的简单 replaceAll 不起作用。 在结果末尾尝试 escapeEdi() 也没有做任何事情,而且我有一个与此非常相似的脚本,它工作得很好,不包含愚蠢的角色。可能导致此问题的原因是什么?
有趣的事)
下面的代码
String header = "EXL=TST+[Placeholder1]+xxx"
header = header.replaceAll("\[Placeholder1\]", "val1")
println header
生产
EXL=TST+?val1?+xxx
最后我发现在你的源字符串中 []
前后有一个奇怪的空格,其 uni-code 值为 (8203)
并且是Unicode Character 'ZERO WIDTH SPACE' (U+200B)
见绿色截图: