Flexmark Typographic Extension静默丢失字符?配置排查或Bug确认
问题诊断与解决方案
核心问题:渲染器未启用Typographic Extension
你仅在Markdown解析器中注册了TypographicExtension,但HTML渲染器并未加载该扩展。Flexmark的扩展需要同时在解析器和渲染器中配置,否则渲染阶段无法正确处理解析器生成的节点,最终导致字符丢失。
修复步骤
修改HTML渲染器的构建代码,将TypographicExtension添加到渲染器的扩展列表中,最简单的方式是复用解析器的配置:
htmlRenderer = HtmlRenderer.builder(parserOptions).build();
也可以单独为渲染器配置扩展:
MutableDataHolder rendererOptions = new MutableDataSet() .set(HtmlRenderer.EXTENSIONS, List.of(TypographicExtension.create())); htmlRenderer = HtmlRenderer.builder(rendererOptions).build();
验证测试
调整配置后,执行你的测试代码:
com.vladsch.flexmark.util.ast.Document markdownDocument = parser.parse("it's working"); System.out.println(htmlRenderer.render(markdownDocument));
将得到预期输出:<p>it’s working</p>
关于---丢失的补充说明
---默认会被Typographic Extension转换为—(长破折号),同样因为渲染器未加载扩展,解析后的节点无法被正确渲染导致丢失。添加渲染器扩展后该问题会同步解决。
额外说明
你之前尝试的TypographicExtension.ENABLE_QUOTES等配置无效,本质是因为渲染器未加载扩展,这些配置根本没有生效。只有当扩展同时在解析器和渲染器中启用后,相关配置参数才会起作用。
内容的提问来源于stack exchange,提问作者Garret Wilson
相关产品推荐
相关产品推荐

