При создании ISO-8859-1 XML с помощью node.js не работают модули iconv-lite и iconv - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь создать файл XML в кодировке ISO-8859-1, но не могу кодировать текстовую строку 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");

Я использую это для создания динамических файлов 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, так как большая часть строки подходит для обеих кодировок.

...