【问题标题】:Remove invalid characters from message sent to AWS/Amazon SQS从发送到 AWS/Amazon SQS 的消息中删除无效字符
【发布时间】:2019-11-11 21:46:02
【问题描述】:

背景: 当消息在参数中传递给sqsClient.sendMessage(...) 时,Amazon SQS 对它可以接受的字符范围有一个限制。 (提到here)。

摘自以上链接:

A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed:

#x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF

Any characters not included in this list will be rejected.

问题: 目前,我们知道作为消息发送的消息 json 中存在违规字符,因此我们将它们过滤掉 message_json.replaceAll("\uffff", ""); 这很好用。 (其中 '\uffff' 是 xFFFF/U+FFFF 字符的 java 表示形式)。

但是,我想对上面提到的整个范围执行此操作,而不是只对 xFFFF 字符执行此操作(#x9 | #xA | #xD | #x20 to #xD7FF | #xE000 to #xFFFD | #x10000 to #x10FFFF),但是如何构造一个可以采用字符范围而不对每个字符运行替换的子句?

【问题讨论】:

  • 澄清问题:我想对上面提到的所有无效字符进行替换。我不是在问同一个字符的多次出现。
  • 您是在发送 JSON 或 XML 消息,还是纯文本?大多数这些字符在 JSON/XML 中已经无效 - 当您尝试解析消息时,它们可能会被拒绝。否则,您可以使用方括号在您的正则表达式中创建一个字符类 - 包括该类中的所有有效字符,然后通过将 [^ 放在开头来否定该类。
  • 这是一个包含该字符的json字符串。是的,我想知道一个正则表达式类/或任何可以采用诸如 [\u20 - \ud7ff] 范围的构造。这是主要问题。
  • 你在建设方面有什么尝试?出了什么问题?

标签: java unicode utf-8 aws-sdk amazon-sqs


【解决方案1】:

我遇到了这个问题并使用了这个正则表达式

/([^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\u{10000}-\u{10FFFF}])/u```

【讨论】:

    【解决方案2】:

    其实,答案就在眼前。出于某种原因,我假设正则表达式的字符类不会接受这些转义字符,例如 [\ufffd-\uffff]message_json.replaceAll("[\ufffd-\uffff]", " ");

    这适用于我的情况。

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 1970-01-01
      • 2010-12-12
      • 2012-08-25
      • 2023-03-23
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2020-03-24
      相关资源
      最近更新 更多