【问题标题】:After reading file using fs.readFileSync(), string replace function is not working使用 fs.readFileSync() 读取文件后,字符串替换功能不起作用
【发布时间】:2020-09-23 01:42:45
【问题描述】:

我有一个名为 test.txt 的文件,其数据为“qwe abc xyz”

而我的代码如下:

let data = fs.readFileSync('test.txt', 'utf8')
    console.log(data)
    data = data.substring(2) //doing this because first two chars are garbage
    console.log(data)
    let data2 = data.replace('abc', 'Decimal');
    console.log(data2)

这段代码的输出:

��qwe abc xyz
qwe abc xyz
qwe abc xyz

为什么我的 abc 没有被 data2 中的 Decimal 替换?我也尝试过以下方法:

let data = fs.readFileSync('test.txt', 'utf8')
    console.log(data)
    data = data.substring(2) //doing this because first two chars are garbage
    console.log(data)
    let data2 = data.replace(/abc/g, 'Decimal');
    console.log(data2)

它仍然提供相同的输出。可能是什么问题?会不会跟sync/async有关?

【问题讨论】:

  • 您的两个代码在我的编辑器上都可以正常工作
  • 这很奇怪。你得到的输出是什么?
  • 我在我的编辑器中对其进行了测试,它也可以正常工作????。您可以在 let data = ... 之后进行调试。了解它是如何工作的
  • ??qwe abc xyz qwe abc xyz qwe Decimal xyz 以上输出是从我的控制台复制的

标签: javascript node.js string replace


【解决方案1】:

编辑:
根据 cmets,有问题的文件是 utf-16 little endian。 here 提供的答案有效。

let data = fs.readFileSync('test.txt', 'utf16le');

原始答案
见答案here。您必须将字符串转换为utf8

let data = fs.readFileSync('test.txt', 'utf8');
data = data.toString('utf8').replace(/^\uFEFF/, '');

【讨论】:

  • 这不起作用。我认为答案与使用正确编码读取文件有关,而我的问题是替换命令不起作用。我还检查了 text.txt 文件的编码,它是 file -I test.txt test.txt: text/plain; charset=utf-16le
  • 您应该尝试记录字符串长度。它可能会给你一个线索。有时会在全部或部分字符之间插入不可见字符。
猜你喜欢
  • 1970-01-01
  • 2021-07-04
  • 2015-08-22
  • 2020-08-12
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多