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