【问题标题】:Files written with fs.writeFile have extra new lines compared to console.log. Why?与 console.log 相比,使用 fs.writeFile 编写的文件有额外的新行。为什么?
【发布时间】:2020-10-19 09:36:45
【问题描述】:

我有以下代码:

async function writeFile(path: string, content: string): Promise<void> {
  console.log(content);
  try {
    await fs.writeFile(path, content, "utf8");
  } catch (err) {
    reject(err);
  }
}

console.log 打印

<?xml version="1.0" encoding="utf-8"?>
<?tgml 2.0?>

<Tgml Height="10" Stretch="Uniform" Width="10">
  <Layer Stroke="None" Fill="#000000" Name="viewbox-clip">
    <Translate X="5" Y="5"/>
    <Rectangle Height="10" Left="0" Top="0" Width="10"/>
    <Ellipse Fill="#FFFFFF" Height="8" Left="1" Top="1" Width="8"/>
  </Layer>
</Tgml>

打开写入的文件(至少在 Sublime Text 或记事本中)显示:

<?xml version="1.0" encoding="utf-8"?>
<?tgml 2.0?>



<Tgml Height="10" Stretch="Uniform" Width="10">

  <Layer Stroke="None" Fill="#000000" Name="viewbox-clip">

    <Translate X="5" Y="5"/>

    <Rectangle Height="10" Left="0" Top="0" Width="10"/>

    <Ellipse Fill="#FFFFFF" Height="8" Left="1" Top="1" Width="8"/>

  </Layer>

</Tgml>
  • 与控制台日志相比,为什么写入的文件中有多余的行尾?
  • 如何使写入的文件看起来像 console.log 中的输出,换句话说,我如何选择不添加额外的新行?

以下是有关我的环境的信息,以防它与问题相关:Windows,控制台日志到 PowerShell

【问题讨论】:

    标签: node.js windows newline writefile


    【解决方案1】:

    一种可能的解释可能是您的数据包含\r\r\n 换行符,无论出于何种原因,您的终端将这些换行符解释并打印为单个换行符。但是,编辑器会显示额外的一行,从而导致两个换行符。

    作为一种解决方法并验证是否是这种情况,您可以在将content 写入文件之前使用以下内容替换这些非法换行符:

    content = content.replace(/\r\r\n/g,"\r\n");
    

    【讨论】:

    • @user1283776:只是出于好奇 - 这是否有帮助/您找到错误的原因了吗?
    • 您解决了我的问题,谢谢!我仍然对为什么文件有 \r\r\n 换行符感到头疼。
    • 很高兴听到这个消息!也许这可以解释它:unix.stackexchange.com/a/235151
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多