代码之家  ›  专栏  ›  技术社区  ›  Mike Marshall

用javascript解析UTF-8xml

  •  1
  • Mike Marshall  · 技术社区  · 5 年前

    我尝试使用node和 xpath xmldom 包装。没有使用XML名称空间,转换为ASCII时会解析相同的XML。在VS代码中的调试器中,我可以看到字符串在每个字符之间都嵌入了空格(这肯定是因为错误地加载了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 .

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

    1 回复  |  直到 5 年前
        1
  •  1
  •   NineBerry    5 年前

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

    尝试 'utf16le' .

    有关支持的编码的列表,请参见 Buffers and Character Encodings .