今天,在调试一个node项目时,发现了一个很大的坑,在此分享给大家!
大家都知道,Json.parse()方法对格式要求是很严格的,格式不对极其容易报错,但是有时候格式看似是正确的也会报错.
比如这一段在控制台可以正确的用Json.parse()方法解析出来,但是我把它放到记事本中仍然可以正确读取到一模一样的数据
但是如果此时用JSON.parse方法解析这段字符串就会报错.
为什么呢,因为记事本这个编辑工具在手动保存时会自动把数据做一些处理,导致数据看起来是对的,但是却无法解析,因为数据里面搀杂着不会显示的unicode字符,
utf-8分有dom版和无dom版,一般编辑器不刻意设置会默认保存为带dom的utf8,解决办法是先将读到的文件转成二进制,然后检索dom符号删除,以下是方法:
function
readText(pathname) {
var
bin = fs.readFileSync(pathname);
if
(bin[0] === 0xEF && bin[1] === 0xBB && bin[2] === 0xBF) {
bin = bin.slice(3);
}
return
bin.toString(
'utf-8'
);
}