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)

见绿色截图: