CNode

nodejs 如何读取文件编码信息

Cchihuohuo发布于13 年前最后回复9 年前14 回复19742 浏览0 收藏

RT,

iconv-lite好像不会自动识别文件编码。

例如: A.md //utf-8 B.md //ANSI

用iconv的encode(data, 'utf-8')读取A文件正常,B文件就会乱码

有没有这样的模块能识别文件编码信息呢

查看回复

回复 (14)

C
coogleyou#1·12 年前

淫才,淫才啊

X
xueyou2000#2·11 年前
引用 chihuohuo我只能苦逼的这样干了 ...

@chihuohuo 跟我一样, 我检测文件的UTF8 BOM, 检测到是UTF8则继续,否则用GBK转换下

var data = fs.readFileSync(url);
if (data[0] == 0xEF && data[1] == 0xBB && data[2] == 0xBF) {
	// 说明是 utf8编码
}else{
	// 一顿假设, 当作GBK
}
Z
zlbbq#4·11 年前

BOM表达的是写文件的机器的Endian吧,和内容编码应该没关系。win txt的带BOM utf-8只是特殊场景。

X
xueyou2000#5·11 年前
引用 zlbbqBOM表达的是写文件的机器的Endian吧,和内容编码应该没关系。win txt的带BOM utf 8只是特殊场景。

@zlbbq 并不是, BOM是用来标记此文本是什么编码的, 只是windows的记事本自动的加上而已.

H
hellopao#6·11 年前

之前用过这个jschardet

O
owen-hong#7·11 年前

无意中发现此帖,不知道这个问题现在是否有了更好点解决方案,求大神解答

O
owen-hong#8·11 年前
引用 hellopao之前用过这个jschardet

@hellopao 这个包不错,相当赞,感谢!!!

F
fangker#9·9 年前

我靠踩坑来了

C
chihuohuo#10·13 年前

up

J
JacksonTian#11·13 年前

自动识别编码很难搞的。

X
XadillaX#12·13 年前
引用 JacksonTian自动识别编码很难搞的。

有挺多语言的自带库或者三方库都有这样子的功能啊。

S
sumory#13·13 年前

不能保证识别的绝对准确。文件编码这个问题太复杂了,有各种各样的情况,涉及文件头、文件具体内容等等。 很简单的例子,文件内容可能分多次写入,每次写的时候用了不同编码; 又比如,有些字符(比如汉语拼音),你用文本文件打开看不出乱码,只不过是没显示出来,使用文本编辑器检测的编码是utf8,但实际上这些字符需要big5才能显示.

C
chihuohuo#14·13 年前

我只能苦逼的这样干了 ...

var str = iconv.decode(data, 'utf-8');

// 编码不对试着用GBK编码
if(str.indexOf('�') != -1){
    str = iconv.decode(data, 'gbk');
}
参与回复
登录后即可参与回复。登录