import { readFileSync } from 'node:fs'; const p = 'd:/work/ylrz_saas/java/fs-saas-company/src/main/java/com/fs/company/controller/workflow/LobsterDeepDialogueController.java'; const raw = readFileSync(p); const t = raw.toString('utf8'); console.log('BOM', raw.length >= 3 && raw[0] === 0xef && raw[1] === 0xbb && raw[2] === 0xbf); console.log('FFFD', t.includes('\uFFFD')); console.log('u escapes', (t.match(/\\u[0-9a-fA-F]{4}/g) || []).length); t.split('\n').forEach((line, i) => { if (line.includes('\uFFFD') || (/[\u0080-\u00ff]{3,}/.test(line) && /[\u4e00-\u9fff]/.test(line) === false && /[\x80-\xff]/.test(line))) { // skip } if (line.includes('\uFFFD')) { console.log('FFFD', i + 1, line.trim().slice(0, 120)); } });