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

ZIP文件路径含重音字符时MarkLogic XQuery应用无法读取文件问题求助

问题根因

Windows系统创建ZIP文件时,默认使用CP437(英文环境)或GBK(中文环境)编码存储文件路径/文件名,而非UTF-8。MarkLogic的zip处理模块默认采用UTF-8解码路径,编码不匹配就会导致重音、非ASCII字符乱码,你遇到的é被识别为U+201A字符就是典型的编码错位问题。

可行解决方案

方案1:调用zip接口时指定解码编码

MarkLogic 10的zip系列函数支持传入第三个参数指定编码,你读取清单、提取文件时都指定对应Windows编码即可:

  • 读取ZIP清单示例:
(: 替换为你拿到的上传ZIP二进制内容 :)
let $zip-bin := xdmp:document-get("upload.zip", ("format-binary"))
return zip:list($zip-bin, "CP437")
  • 提取指定文件示例:
let $zip-bin := xdmp:document-get("upload.zip", ("format-binary"))
let $target-path := "Café/your-target-file.txt" (: 正确的带重音路径 :)
return zip:get-entry($zip-bin, $target-path, "CP437")

如果是中文Windows环境制作的ZIP,把上面的CP437替换为GBK即可。

方案2:对已得到的乱码路径做反向转码

如果你已经拿到了乱码的路径清单,可以通过编码转换得到正确路径后再调用提取接口:

let $garbled-path := "Caf‚/your-target-file.txt" (: 你读到的带乱码的路径 :)
let $correct-path := xdmp:decode(xdmp:encode($garbled-path, "UTF-8"), "CP437")
return zip:get-entry($zip-bin, $correct-path, "CP437")
补充建议

如果可以调整上传规则,建议要求用户压缩ZIP时选择UTF-8编码存储文件名,从源头上避免多环境编码适配问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:15:02