当我从文件中读取行时,我试图打印一些包含英语和俄语单词的字符串。我在控制台中收到替换字符(�����)而不是西里尔符号。如果我试图返回一个行数组,我会遇到同样的麻烦。
一条普通线如下:
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
非常感谢您!
答案 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;
};