Как определить, какая кодировка была определена для файла?
Я хочу что-то вроде этого:
fs.getFileEncoding('C:/path/to/file.txt') // it returns 'UTF-8', 'CP-1252', ...
Есть ли простой способ сделать это, используя встроенную функцию nodejs?
Это то, чем я пользуюсь некоторое время. YMMV. Надеюсь, это поможет.
var fs = require('fs'); ... getFileEncoding( f ) {</p> <pre><code> var d = new Buffer.alloc(5, [0, 0, 0, 0, 0]); var fd = fs.openSync(f, 'r'); fs.readSync(fd, d, 0, 5, 0); fs.closeSync(fd); // https://en.wikipedia.org/wiki/Byte_order_mark var e = false; if ( !e && d[0] === 0xEF && d[1] === 0xBB && d[2] === 0xBF) e = 'utf8'; if (!e && d[0] === 0xFE && d[1] === 0xFF) e = 'utf16be'; if (!e && d[0] === 0xFF && d[1] === 0xFE) e = 'utf16le'; if (!e) e = 'ascii'; return e;
}
Вы можете использовать модуль npm, который делает именно это: https://www.npmjs.com/package/detect-character-encoding
Вы можете использовать это так:
const fs = require('fs'); const detectCharacterEncoding = require('detect-character-encoding'); const fileBuffer = fs.readFileSync('file.txt'); const charsetMatch = detectCharacterEncoding(fileBuffer); console.log(charsetMatch); // { // encoding: 'UTF-8', // confidence: 60 // }