| 632 | } |
| 633 | |
| 634 | function detectTextMeta(buffer) { |
| 635 | if (!buffer || buffer.length === 0) { |
| 636 | return { encoding: 'utf8', bom: 'none', bomLength: 0 } |
| 637 | } |
| 638 | if (buffer.length >= 3 && buffer[0] === 0xef && buffer[1] === 0xbb && buffer[2] === 0xbf) { |
| 639 | return { encoding: 'utf8', bom: 'utf8', bomLength: 3 } |
| 640 | } |
| 641 | if (buffer.length >= 2 && buffer[0] === 0xff && buffer[1] === 0xfe) { |
| 642 | return { encoding: 'utf16le', bom: 'utf16le', bomLength: 2 } |
| 643 | } |
| 644 | if (buffer.length >= 2 && buffer[0] === 0xfe && buffer[1] === 0xff) { |
| 645 | return { encoding: 'utf16be', bom: 'utf16be', bomLength: 2 } |
| 646 | } |
| 647 | return { encoding: 'utf8', bom: 'none', bomLength: 0 } |
| 648 | } |
| 649 | |
| 650 | function decodeTextBuffer(buffer) { |
| 651 | const meta = detectTextMeta(buffer) |