有没有办法识别 GBK 格式 or UTF-8 格式?
发布于 5 年前 作者 mapleincode 4190 次浏览 来自 问答

帮媳妇儿处理小说,一般下载下来的小说大部分是 GBK。而 mac 上的编辑器对 GBK 很无力。所以通过 iconv-lite 转换成 UTF-8。期间没有想到办法可以自动识别两者的文档,以至于可以达到如果是 GBK 转成 utf8,如果不是则不操作。

如果是 iconv-lite 的方法最好,别的也都行,无论优雅的粗暴的。

4 回复
  1. 根据 response header 里面的 content-type,看看有无 charset 信息
  2. 根据页面 meta 标签,看看有无 charset 信息
  3. 当然页面要是带 BOM 也可以一试
  4. 最后的方法就是尝试将内容按 utf8 来解,即验证 utf8 数据的完整性。如果可以整个解开,则当做 utf8 来保存,否则当做 Gbk 进而执行转码。

验证 utf8 数据完整性,如果是爱自己动手的同学,可以参考 UTF-8 编码及检查其完整性.md ,不爱自己动手也可以搜一搜现成的包

https://github.com/aadsm/jschardet/blob/master/README.md

另一个简单的版本

let data = buffer.toString('utf8',0,buffer.length)
if (data.indexOf('�') >= 0 || data.indexOf('') >= 0) {
    data = iconv.decode(buffer, 'GBK')
}
if (data.indexOf('�') >= 0 || data.indexOf('') >= 0) {
    data = iconv.decode(buffer, 'utf16')
}

@hsiaosiyuan0 感谢回答。不过我这个是 txt 文件不是 html

@yuanliwei 感谢。下班回家去试试。应该可以解决这个问题。

回到顶部