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

使用Freemarker打印时遭遇无效XML字符错误求助

解决Freemarker打印时的无效XML字符错误

你遇到的问题是API返回的JSON中包含\u2013(短破折号)这类字符,导致Freemarker生成XML时触发无效字符报错。以下是几种直接可行的处理方案:

方案一:用Freemarker内置指令转义XML特殊字符

如果输出是XML格式,直接对变量使用?xml内置指令,它会自动将XML不兼容的字符转换为合法实体:

${key?xml}

比如会把\u2013转成–,确保XML解析器能正常识别。

方案二:预处理JSON数据清理无效字符

在将JSON转换为Freemarker可用的数据模型前,过滤掉XML禁止的控制字符(注意\u2013本身是合法XML字符,可能是其他隐藏控制字符导致报错)。以Java后端为例:

// 匹配XML无效控制字符的正则
String invalidXmlRegex = "[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]";
Pattern pattern = Pattern.compile(invalidXmlRegex);

// 清理字符串
String cleanedValue = pattern.matcher(originalValue).replaceAll("");

方案三:强制设置UTF-8编码避免字符乱码

确保Freemarker输出和XML文档都使用UTF-8编码,避免编码不匹配引发的解析错误:

  1. 配置Freemarker编码:
configuration.setDefaultEncoding("UTF-8");
configuration.setOutputEncoding("UTF-8");
  1. 在生成的XML头部声明编码:
<?xml version="1.0" encoding="UTF-8"?>

备选方案:手动替换特殊字符(谨慎使用)

如果确认\u2013是问题根源,可以直接替换为普通破折号,但会修改原文内容:

${key?replace("\u2013", "-")}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:35:03