320
* Guesses the encoding from buffer.
321
*/
322
>
async function guessEncodingByBuffer(buffer: VSBuffer, candidateGuessEncodings?: string[]): Promise<string | null> {
encoding.ts
323
>
const jschardet = await importAMDNodeModule<typeof import('jschardet')>('jschardet', 'dist/jschardet.min.js');
324
>
325
>
// ensure to limit buffer for guessing due to https://github.com/aadsm/jschardet/issues/53
326
>
const limitedBuffer = buffer.slice(0, AUTO_ENCODING_GUESS_MAX_BYTES);
327
>
328
>
// before guessing jschardet calls toString('binary') on input if it is a Buffer,
329
>
// since we are using it inside browser environment as well we do conversion ourselves
330
>
// https://github.com/aadsm/jschardet/blob/v2.1.1/src/index.js#L36-L40
331
>
const binaryString = encodeLatin1(limitedBuffer.buffer);
332
>
333
>
// ensure to convert candidate encodings to jschardet encoding names if provided
334
>
if (candidateGuessEncodings) {
335
candidateGuessEncodings = coalesce(candidateGuessEncodings.map(e => toJschardetEncoding(e)));
336
if (candidateGuessEncodings.length === 0) {