function decodeNginxLog(c) {
let r = '';
for (let i = 0; i < c.length;) {
if (c[i] === '\\' && c[i + 1] === 'x') {
let j = i;
let hexList = [];
while(true) {
if (c[j] === '\\' && c[j + 1] === 'x') {
hexList.push(c[j + 2]);
hexList.push(c[j + 3]);
} else {
break;
}
j += 4;
}
r += Buffer.from(hexList.join(''), 'hex').toString('utf8');
i = j;
} else{
r += c[i];
i++;
}
}
return r;
}
例如: 从文件里面读出来的内容对 \
已经转义过了. 在这里我模拟一个字符串:
// 如果是文件的话, 文件内容是: \x22abcdefg\x22
var txt = '\\x22abcdefg\\x22';
console.log(decodeNginxLog(txt));