我使用node的fs.readFile读取的本地一个css文件内容中包含了UTF-8 BOM头,怎么去除呢?

我使用node的fs.readFile读取了本地一个css文件内容cssData,
然后在页面的head标签中创建了style标签,将cssData赋给了style.innerHtml,
但是样式没生效,我检查后发现在style标签中样式的最前面多了个:&#65279,上网查了下说时utf-8的bom头,我输出了cssData没发现有这个,不知道怎么去除这个。请问我该怎么去掉style标签中的这个BOM头?

阅读 3.3k
3 个回答

一般包含BOM头的是在windows下生成的(用诸如记事本之类工具才会添加)
如果这个文件你可以控制,可以自行重新保存为没有BOM头的就好。
否则,可以额外采用如下函数去除

function readText(pathname) { //去除utf-8 BOM的文本文件读取
    var bin = fs.readFileSync(pathname);

    if (bin[0] === 0xEF && bin[1] === 0xBB && bin[2] === 0xBF) {
        bin = bin.slice(3);
    }

    return bin.toString('utf-8');
}

1.首先你这个css文件是否是你自己可控的呢?如果是可控的是否按照uft-8 no BOM标准保存一下再读取就ok了?
2.如果1解决不了,能不能设置style.innerHtml= str.replace('','')

我刚试了一下你这个方法解决了我的问题,但是我换成异步: fs.readFile() 的就不行,这是为什么呢。如果时异步我该怎么操作?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题