You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何移除特定Unicode字符(保留é等可打印字符)

解决方案:移除XML非法字符同时保留é等非ASCII可打印字符

问题根源

XML 1.0规范仅允许特定范围的字符:#x9(制表符)、#xA(换行)、#xD(回车),以及#x20-#xD7FF、#xE000-#xFFFD、#x10000-#x10FFFF区间的字符。\u0019(End Of Medium)属于非法控制字符,而é(U+00E9)落在合法区间内。之前使用\\P{Print}会误删é,因为\P{Print}仅覆盖ASCII可打印字符(0x20-0x7E),不包含非ASCII的打印字符;StringEscapeUtils.unescapeJava是处理Java转义字符的工具,并不适用于移除XML非法字符。

可行方案

方案1:精准移除目标非法字符

如果确认只有\u0019这一个问题字符,直接针对性替换最高效,完全不会影响其他字符:

public String removeEOMChar(String input) {
    if (input == null) return null;
    return input.replace("\u0019", "");
}

方案2:批量移除所有XML非法字符

如果可能存在其他类似的非法控制字符,用正则匹配XML规范外的字符并移除,同时保留所有合法字符(包括é这类非ASCII字符):

public String sanitizeXmlString(String input) {
    if (input == null) return null;
    // 匹配所有XML 1.0不允许的字符
    String invalidXmlCharsRegex = "[^\\x09\\x0A\\x0D\\x20-\\xD7FF\\xE000-\\xFFFD\\x10000-\\x10FFFF]";
    return input.replaceAll(invalidXmlCharsRegex, "");
}

验证示例

输入字符串:L'Oréal\u0019Test

  • 方案1处理后:L'OréalTest
  • 方案2处理后:L'OréalTest

两种方案都不会删除é,同时解决了XML解析报错的问题。

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:05:55