Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中解析UTF-8XML_Javascript_Node.js_Xml_Utf 8_Xmldom - Fatal编程技术网

在javascript中解析UTF-8XML

在javascript中解析UTF-8XML,javascript,node.js,xml,utf-8,xmldom,Javascript,Node.js,Xml,Utf 8,Xmldom,我试图使用node和xpath和xmldom包在javascript中加载和解析一个简单的utf-8编码的XML文件。没有使用XML名称空间,转换为ASCII时会解析相同的XML。在VS代码中的调试器中,我可以看到字符串在每个字符之间都嵌入了空格(当然是由于加载utf-8文件不正确),但我找不到正确加载和解析utf-8文件的方法 代码: 如果文件为ASCII(textContent具有正确的数据),则代码可以正常工作,但如果文件为UTF-8,则会出现许多解析错误,cvNode未定义 在node/

我试图使用node和
xpath
xmldom
包在javascript中加载和解析一个简单的utf-8编码的XML文件。没有使用XML名称空间,转换为ASCII时会解析相同的XML。在VS代码中的调试器中,我可以看到字符串在每个字符之间都嵌入了空格(当然是由于加载utf-8文件不正确),但我找不到正确加载和解析utf-8文件的方法

代码:

如果文件为ASCII(
textContent
具有正确的数据),则代码可以正常工作,但如果文件为UTF-8,则会出现许多解析错误,
cvNode
未定义


在node/javascript中是否有解析UTF-8xml的正确方法?我一生都找不到一个像样的例子。

当您看到每个字母之间有额外的空格时,这表明文件实际上不是使用utf-8编码的,而是使用16位unicode编码

试试
“utf16le”


有关支持的编码列表,请参见。

您是否尝试过不带减号的
'utf8'
?这是此API中用于utf-8编码的正确值。另一方面,当您在每个字母之间看到额外的空格时,这表明该文件实际上不是使用utf-8编码的,而是使用16位的编码。您是否尝试过“utf16le”?是的,对不起,输入错误。我试过了both@NineBerry“utf16le”成功了。非常感谢。如果你想添加一个正式的答案,我会标记为这样。
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);