【问题标题】:Mule Groovy string replace payload contains question marksMule Groovy 字符串替换有效负载包含问号
【发布时间】:2017-10-05 21:57:42
【问题描述】:
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() 也没有做任何事情,而且我有一个与此非常相似的脚本,它工作得很好,不包括愚蠢的角色​​。什么可能导致此问题?

【问题讨论】:

  • 即使只是尝试自己打印带有占位符的字符串似乎也让我得到了这些“?”是否存在可能导致此问题的特定字符?
  • 期望的输出是什么?

标签: groovy utf-8 mule anypoint-studio


【解决方案1】:

有趣的事情)

以下代码

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)

见绿色截图:

【讨论】:

  • 我在阅读本文之前发现了一个艰难的方法,最终用 ?s 复制了整个结果,用空字符串替换 ?s,然后将它们重新插入以使其工作。真的做得很好而且很聪明——那是记事本++吗?你是如何让他们展示出来的?
  • 是的,它是记事本++ 屏幕/但我在“Far Manager 编辑器”中检测到符号。通常当关于真实字符和字节的问题 - 这对我来说是最好的 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2014-02-12
  • 2017-08-04
  • 2021-12-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多