如何使用JavaScript检测字符串中的无效UTF-8字符?
Node.js检测非标准UTF-8字符的实现方案
直接提供两种可直接使用的实现:
方案1:已解码字符串快速检测
适合已经把CSV内容解码为字符串的场景,直接检测解码产生的替换字符�(U+FFFD):
function hasInvalidUrl(urlStr) { // 仅匹配解码失败产生的�字符,不会误判é这类合法UTF-8字符 return /\uFFFD/.test(urlStr) }
测试效果:
- 错误URL:
hasInvalidUrl('https://example.com/v�hicules-de-location/france')返回true - 正确URL:
hasInvalidUrl('https://example.com/véhicules-de-location/france')返回false
如果需要额外过滤非打印控制字符,可以扩展正则规则:
// 过滤� + 除换行、制表符外的ASCII控制字符 return /[\uFFFD\u0000-\u0008\u000B-\u000C\u000E-\u001F]/.test(urlStr)
方案2:读取文件时直接校验Buffer(更推荐)
从数据源头上避免解码误差,准确率更高:
const fs = require('fs') function isLegalUtf8Buffer(buffer) { try { // 解码后重新编码对比,判断原始编码是否完全符合UTF-8规范 return Buffer.from(buffer.toString('utf8'), 'utf8').equals(buffer) } catch { return false } } // 读取CSV文件时使用 fs.readFile('urls.csv', (err, buffer) => { if (err) throw err if (!isLegalUtf8Buffer(buffer)) { console.log('CSV文件包含非标准UTF-8内容') } // 后续解析CSV流程 })
如果使用csv-parser等流式解析库,可在逐行获取数据后,单独对URL字段调用方案1的检测方法即可。
内容的提问来源于stack exchange,提问作者Álvaro
相关产品推荐
相关产品推荐

