在nodejs中以windows-1251编码格式下载文件

问题描述

我想创建和下载 windows-1251 格式的文本文件。当我尝试使用下面的代码时,文件正在成功下载,但不幸的是,格式为 utf-8。关于我做错了什么的任何建议?

节点代码:


//node-version: v12.13.0
var iconv = require("iconv-lite");

//create txt file 
router.post("/to-text",(req,res) => {
  const arr = req.body.arr; //an array of objects

  var file2 = iconv
    .encodeStream("win1251")
    .pipe(fs.createWriteStream(`filepath`));

  file2.on("error",function (err) {
    return res.status(500).json(err);
  });

  arr.forEach(function (v) {
     const lastChar = v[1].slice(-1);
    if (lastChar === "я") {
      v[1] = v[1] + ".";
    }
    file2.write(v.join(",") + "\n");
  });
  file2.end();
  returnres.send(file2);
});

//dowload txt file
router.get("/download",res) => {
  let file_path = `filepath`;
  res.download(file_path);
});

反应代码:


const getText = () => {
    let arr = [];
    const date = `PLU_${Moment().format("L").split(".").join("")}.txt`;
    productsList.map((e,idx) =>
          arr.push(
            Object.values({
              a: e.hotkey,b: e.name,c: "",})
          )
        );
    // first request to save as text in filepath
    Axios({
      method: "POST",url: "/myapi/to-text",data: {
        arr,date,type: prefixType.value,},responseType: "blob",})
      .then((data) => {
        return data.data;
      })
      .then((resp) => {
        closeModal();
        return Axios.get("myapi/download",{
          responseType: "blob",params: { date },})
          .then((res) => res.data)
          .then((response) => {
            const url = window.URL.createObjectURL(
              new Blob(
                [
                  response,],{
                  type: "text/plain;charset=windows-1251",}
              )
            );
            const link = document.createElement("a");
            link.href = url;
            link.setAttribute("download",date);
            document.body.appendChild(link);
            link.click();
          });
      })
      .catch((err) => {
        ErrorAlert(err);
      });
  };

当在 React 中函数触发时,它首先在服务器端的文件路径中创建一个 txt 文件。然后使用第二个请求下载它。
要检查我使用的文件格式 Notepad++,只需在编辑器中打开它并查看右下角。
我猜是缺少一些小细节,无法正确转换文件,但我看不到它(提前致谢。

解决方法

我已经找到了解决问题的方法。我只需要在循环内对其进行一次编码,而将 .writing 编码到文件中,例如: file.write(iconv.encode(v.join(",") + "\n","win1251")); 就是这样,经过这个小小的操作后,它将文件保存为 windows-1251。显然,以相同的格式下载。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...