问题描述
我正在尝试发送一个 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"
。