【问题标题】:Is it possible to load ansi encoded string using nodejs是否可以使用 nodejs 加载 ansi 编码的字符串
【发布时间】:2020-02-25 12:06:02
【问题描述】:

我有大量 html 文件(大约 2k)。
这些 html`s 是从 word 文档转换的结果。
这些文件在 html 标签中有一些希伯来文文本。我可以使用 vscode 或 notepad++ 编辑器完美地看到文本。

我的目标是遍历文件夹并将文件的内容插入到某个数据库中。 由于我对 nodejs 有一点了解 - 我决定使用 node.js 构建“循环”。 这是我到目前为止完成的地方:

fs.readdir('./myFolder', function (err, files) {
    total = files.length;

    let fileArr = []
    for(var x=0, l = files.length; x<l; x++) {
      const content = fs.readFileSync(`./myFolder/${files[x]}`, 'utf8');    

      let title = content.match(/<title>(.*?)<\/title>/g).pop()

      fileArr.push({id:files[x] , title})
    }
});

问题是:虽然文本在编辑器中正确显示 - 调试时 - 我可以看到“标题”变量获取由问号组成的字符串

我猜是文件编码的问题,我在这里吗?
如果是这样 - 有没有办法解码字符串?

附:我的操作系统是windows10

谢谢

【问题讨论】:

    标签: node.js encoding utf-8 ansi hebrew


    【解决方案1】:

    这里有两种可能性,您的输入文件可能采用多字节编码(例如 utf8 utf16 等),并且由于字体限制,您的调试器根本无法显示正确的字符。

    我会尝试将标题变量写入一些测试文件,如下所示:

    fs.writeFileSync(`title-test-${x}.txt`, title, "utf8");
    

    然后看看你的文本编辑器中的标题是否正确。

    文件也可能以extended ascii 编码进行编码,例如 Windows 1255 或 ISO 8859-8。如果是这种情况,fs.readFileSync 将无法正常工作,因为它不支持这些编码(请参阅node.js encoding list

    如果文件使用单字节扩展 ascii 编码进行编码,则应该可以转换为更便携的编码(例如 utf8)。

    为此我推荐iconv-lite 模块,你可以用它做很多事情!

    例如,要将 Windows 1255 文件转换为 utf8,您可以尝试:

        const iconv = require("iconv-lite");
        const fs = require("fs");
    
        // Convert from an encoded buffer to JavaScript string.
        const fileData = iconv.decode(fs.readFileSync("./hebrew-win1255.txt"),  "win1255");
    
        // Convert from JavaScript string to a buffer.
        const outputBuffer = iconv.encode(fileData, "utf8");
    
        // Write output file..
        fs.writeFileSync("./hebrew-utf8-output.txt", outputBuffer);
    

    【讨论】:

    • 太好了,很高兴为您提供帮助!
    猜你喜欢
    • 2010-10-04
    • 2012-08-09
    • 2012-09-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多