当我要从文件中打印西里尔符号时,如何解决替换字符(�)?

时间:2019-07-19 14:39:07

标签: node.js encoding tail

当我从文件中读取行时,我试图打印一些包含英语和俄语单词的字符串。我在控制台中收到替换字符(�����)而不是西里尔符号。如果我试图返回一个行数组,我会遇到同样的麻烦。

一条普通线如下:

  

URL:GET / products / 1234
  消息:[交易ID:324]Отправка获取запроса:http://...//

     

URL:POST / products / 1234
  消息:[交易ID:324]Отправка发表запроса:http://...//

控制台打印:

  

URL:GET / products / 1234
  消息:[交易ID:324]����������������:http://...//

     

URL:POST / products / 1234
  消息:[交易ID:324]����������������:http://...//

将相同的内容写入数组中(代替带有西里尔字符的行):

[
    "URL:       GET       /products/1234      Message: [transaction ID: 324 ���������������: http://...//",
    "URL:       POST       /products/1234      Message: [transaction ID: 324 ���������������: http://...//",   
]

我该如何解决?

//function to watch for file's changes:
function readFileChanges(file) {
        const Tail = require('tail').Tail;
        const tail = new Tail(file);
        let dataLines = [];
        tail.watch();
        tail.on("line", data => {
            console.log(data);
            dataLines.push(data);
        });
        return dataLines;
    };

我希望得到包含西里尔字符而不是-s的行的数组:

[
    "> URL:       GET       /products/1234      Message: [transaction ID: 324] Отправка Get запроса: http://...//",

    "> URL:       POST       /products/1234      Message: [transaction ID: 324] Отправка Post запроса: http://...//"
]

和适当的控制台输出。

平台是win7和win10,节点版本是10.x

非常感谢您!

1 个答案:

答案 0 :(得分:1)

尝试一下:

const iconv = require('iconv-lite');
const Tail = require('tail').Tail;

function readFileChanges(file) {
        const tail = new Tail(file, {encoding: "binary"});
        let dataLines = [];
        tail.watch();
        tail.on("line", data => {
            data = iconv.decode(data, "cp1251").toString();
            console.log(data );
            dataLines.push(data);
        });
        return dataLines;
    };