CNode

有没有办法识别 GBK 格式 or UTF-8 格式?

问答
Mmapleincode发布于7 年前最后回复7 年前4 回复4807 浏览0 收藏

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

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

查看回复

回复 (4)

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

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

Y
yuanliwei#2·7 年前

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')
}
M
mapleincode#4·7 年前
引用 yuanliweihttps://github.com/aadsm/jschardet/blob/master/README.md 另一个简单的版本

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

参与回复
登录后即可参与回复。登录