Я пытаюсь загрузить и проанализировать простой XML-файл с кодировкой utf-8 в javascript, используя node и пакеты xpath
и xmldom
. Пространства имен XML не используются, и один и тот же XML анализируется при преобразовании в ASCII. Я вижу в отладчике в VS Code, что в строке есть встроенные пробелы между каждым символом (конечно, из-за неправильной загрузки файла utf-8), но я не могу найти способ правильно загрузить и проанализировать файл utf-8.
Код:
var xpath = require('xpath')
, dom = require('xmldom').DOMParser;
const fs = require('fs');
var myXml = "path_to_my_file.xml";
var xmlContents = fs.readFileSync(myXml, 'utf8').toString();
// this line causes errors parsing every single tag as the tag names have spaces in them from improper utf-8 decoding
var doc = new dom().parseFromString(xmlContents, 'application/xml');
var cvNode = xpath.select1("//MyTag", doc);
console.log(cvNode.textContent);
Код работает нормально, если файл ASCII (textContent
имеет правильные данные), но если это UTF-8, то возникает ряд ошибок синтаксического анализа, а cvNode
равно undefined
.
Есть ли правильный способ анализа XML UTF-8 в узле/javascript? Я не могу для жизни мне найти достойный пример.
'utf8'
без минуса? Это правильное значение для кодировки utf-8 в этом API. С другой стороны, когда вы видите дополнительные пробелы между каждой буквой, это говорит о том, что файл на самом деле не закодирован с использованием utf-8, а использует кодировку с 16-битной базой. Вы пробовали'utf16le'
? - person NineBerry   schedule 19.11.2019