XML 转义忽略重音字符

问题描述

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

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

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

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

  • 为什么这些库只转换特定范围?
  • 是否有任何用于 jvm 的库,它支持转义重音字符,如 İğ

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

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

解决方法

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

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

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

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