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

如何在Erlang 18.2(xmerl 1.3.9)的XML声明中添加编码?

在Erlang 18.2(xmerl 1.3.9)中生成带编码声明的XML

我之前也踩过xmerl这个旧版本的坑!在Erlang 18.2搭配xmerl 1.3.9时,直接加encoding参数确实不会自动把编码信息注入到XML声明里,得用手动指定完整prolog的方法才能解决。

具体解决方案

这个版本的xmerl不会自动将encoding选项同步到XML声明中,所以你需要手动定义包含编码信息的prolog字符串,并通过导出函数的参数传入。

比如下面的示例代码:

% 先构建你的XML结构(这里用一个简单的IO列表节点示例)
XmlStructure = {io_list, [], [{device, [], ["Sensor_001"]}, {device, [], ["Actuator_002"]}]},

% 导出XML时指定自定义的prolog,包含utf-8编码声明
XmlOutput = xmerl:export_simple([XmlStructure], xmerl_xml, [
    {prolog, '<?xml version="1.0" encoding="utf-8"?>'},
    {encoding, utf8} % 可选,但建议加上,确保输出字符编码和声明一致
]),

% 打印或保存生成的XML结果
io:format("~s~n", [XmlOutput]).

关键注意点

  1. 使用带参数的导出函数:必须用xmerl:export_simple/3或xmerl:export/3,而不是不带选项参数的export_simple/2,否则无法传入prolog配置。
  2. prolog字符串的写法:用单引号包裹整个prolog字符串可以避免双引号转义的麻烦,比转义写法更简洁。
  3. 编码一致性:同时添加{encoding, utf8}选项可以确保xmerl输出的字符编码和XML声明中的编码一致,避免出现乱码或解析问题。

为什么之前的尝试没生效?

在xmerl 1.3.9这个版本中,encoding选项仅用于控制输出字符串的编码格式,不会自动修改默认的XML声明(默认只有version="1.0")。必须手动指定完整的prolog才能让编码信息出现在XML开头的声明标签里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:05:09