Mule Groovy字符串替换有效负载包含问号

时间:2017-10-05 12:03:41

标签: groovy utf-8 mule anypoint-studio

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,坦率地说,没有通过的任何值都有这样的字符,纯粹是字母数字。

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

带有空字符串的简单replaceAll不起作用。 尝试在结果的末尾escapeEdi()也没有做任何事情,我有一个非常相似的脚本,它工作得很好,包括没有愚蠢的字符。可能导致此问题的原因是什么?

1 个答案:

答案 0 :(得分:1)

有趣的事情)

以下代码

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

产生

EXL=TST+?val1?+xxx

最后我发现你的源代码字段[]之前和之后有一个奇怪的空格,带有uni-code value(8203)

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

请参见绿色屏幕截图:

enter image description here