首页 > 解决方案 > 使用 node.js iconv-lite 和 iconv 模块创建 ISO-8859-1 XML 时失败

问题描述

我试图在 ISO-8859-1 字符集中创建 XML 文件,但我无法将 UTF-8 文本字符串编码为 ISO-8859-1。

var xmlStr = '<!-- This line needs to be here to test äöå -->';
var Iconv  = require('iconv').Iconv;
var iconv = new Iconv('UTF-8', 'ISO-8859-1');
var xmlStr = iconv.convert(xmlStr); 

使用 iconv-lite 时也会发生同样的事情

var xmlStr = '<!-- This line needs to be here to test äöå -->';
var iconv  = require('iconv-lite');
xmlStr = iconv.encode(new Buffer(xmlStr), "ISO-8859-1");

然而,如果我在标签之外添加额外的字符(使用两个模块),编码工作正常。在这种情况下,即使标签内的字符也被正确编码。

var xmlStr = 'ö<!-- This line needs to be here to test äöå -->';
var iconv  = require('iconv-lite');
xmlStr = iconv.encode(new Buffer(xmlStr), "ISO-8859-1");

我用它来创建要通过 express 下载的动态 XML 文件

res.set("content-type", "application/xml; charset=iso-8859-1");
res.set("Content-Disposition", "attachment;filename=file.xml");
res.set('transfer-encoding', 'binary');
res.send(xmlStr); 

我猜开头的字母告诉“某人”从哪里进行编码,但它不够聪明,无法理解来自 xml 标记内部的字母,因为大多数字符串都适用于两个字符集。

标签: node.jsexpressutf-8iso-8859-1iconv

解决方案


推荐阅读