如何在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]).
关键注意点
- 使用带参数的导出函数:必须用
xmerl:export_simple/3或xmerl:export/3,而不是不带选项参数的export_simple/2,否则无法传入prolog配置。 - prolog字符串的写法:用单引号包裹整个prolog字符串可以避免双引号转义的麻烦,比转义写法更简洁。
- 编码一致性:同时添加
{encoding, utf8}选项可以确保xmerl输出的字符编码和XML声明中的编码一致,避免出现乱码或解析问题。
为什么之前的尝试没生效?
在xmerl 1.3.9这个版本中,encoding选项仅用于控制输出字符串的编码格式,不会自动修改默认的XML声明(默认只有version="1.0")。必须手动指定完整的prolog才能让编码信息出现在XML开头的声明标签里。
内容的提问来源于stack exchange,提问作者Stratus3D
相关产品推荐
相关产品推荐

