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

BaseX解析含扩展Unicode字符的HTML乱码如何解决?

问题原因

该问题并非解析环节丢失字符,本质是BaseX默认序列化输出的编码配置不支持Unicode辅助平面字符,测试用的数学希腊字母属于超出BMP的扩展字符,默认输出编码无法识别就被替换为了问号,底层依赖的TagSoup实际已经完成了正确解析。

解决方案

方案1:全局指定序列化编码(最简便)

在XQuery查询开头添加编码声明即可直接解决,修改后的测试代码如下:

declare option output:encoding 'utf-8';
let $htmlRaw := '<span class="eqn">&#120746; + &#120747; = &#120748;</span>'
let $htmlParsed := html:parse($htmlRaw, map { 'encoding': 'utf-8'})
return (
  'INPUT', 
  $htmlRaw,
  'OUTPUT',
  $htmlParsed
)

方案2:单结果指定序列化规则

如果不想修改全局查询配置,可以仅在输出解析结果时调用serialize()函数手动指定编码,示例如下:

let $htmlRaw := '<span class="eqn">&#120746; + &#120747; = &#120748;</span>'
let $htmlParsed := html:parse($htmlRaw, map { 'encoding': 'utf-8'})
return (
  'INPUT', 
  $htmlRaw,
  'OUTPUT',
  serialize($htmlParsed, map { 'encoding': 'utf-8', 'method': 'html' })
)

方案3:源码层面透传TagSoup参数

如果需要从解析环节控制编码,可以修改BaseX的HTML模块源码,在调用TagSoup解析器时增加output-encoding参数的透传逻辑,后续调用html:parse()时直接传入该参数即可生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 21:15:08