XML 转义忽略重音字符

XML Escaping ignores accentuated characters

我正在尝试发送 POST 请求,其中请求正文包含 XML。 接收 API 要求任何特殊字符都应使用数字 xml 实体进行编码。

让我们举个例子: İlkay Gündoğan

在xml-使用org.apache.commons.text.StringEscapeUtils等标准库转义或使用XML-Parser Jsoup之后,它只会产生:

İlkay Gündoğan,但忽略了 İğ。我已经阅读了那些提到的库的文档,并读到只有一定范围的字符被转义。

我已经尝试将手动制作的示例 (İlkay Gündoğan) 发送到 recv。 API 并且按预期工作。

所有值都以 UTF-8 写入和读取。

如果 XML 编码为 UTF-8(默认),则不需要将特殊字符转换为数字实体。所以你有一个可疑的接收者。 escapeXml11 确实像 javadocs 所说的那样受到限制。

翻译 String xml 的所有非 ASCII 字符:

xml = xml.codePoints()
    .map(cp -> cp < 128 ? Character.toString(cp) : String.format("&#%d;", cp))
    .collect(Collectors.joining());

您甚至可以设置 encoding="US-ASCII"