加入收藏 | 设为首页 | 会员中心 | 我要投稿 91站长网 (https://www.91zhanzhang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

BOM头是什么?添加和移除怎样操作?

发布时间:2022-01-11 16:46:51 所属栏目:语言 来源:互联网
导读:BOM头是什么?BOM也就是byte order mark,也叫做字节顺序标记。这篇文章我们主要来了解BOM添加和移除的操作,下文有示例供大家参 考,感兴趣的朋友可以了解看看。 BOM 字节顺序标记(byte order mark),是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UT
       BOM头是什么?BOM也就是byte order mark,也叫做字节顺序标记。这篇文章我们主要来了解BOM添加和移除的操作,下文有示例供大家参 考,感兴趣的朋友可以了解看看。
 
BOM
 
字节顺序标记(byte order mark),是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。
 
不同编码的字节顺序标记的表示:
 
编码 表示(十六进制) 表示(十进制)
UTF8 EF BB BF 239 187 191
UTF-16(大端序) FE FF 254 255
UTF-16(小端序) FF FE 255 254
UTF-32(大端序) 00 00 FE FF 0 0 254 255
UTF-32(小端序) FF FE 00 00 255 254 0 0
BOM添加
 
      UTF8编码不需要BOM, 但是我们可以手动给UTF8编码文件添加一个BOM头
 
const fs = require('fs');
 
fs.writeFile('./bom.js', 'ufeffThis is an example with accents : é è à ', 'utf8', function (err) {})
 
BOM移除
 
        对于UTF8来说,BOM的有无并不是必须的,因为UTF8字节没有顺序,不需要标记,也就是说一个UTF8文件可能有BOM,也可能没有BOM。
 
根据不同编码的BOM不同,我们可以根据文件头几个字节来判断文件是否包含BOM,以及使用的那种Unicode编码。
 
BOM字符虽然起到了标记文件编码的作用,其本身却不属于文件内容的一部分,如果读取文本文件时不去掉BOM,在某些使用场景下就会有问题。例如我们把几个JS文件合并成一个文件后,如果文件中间含有BOM字符,就会导致浏览器JS语法错误。因此,使用Node.js读取文本文件时,一般需要去掉BOM。
 
// 对于字符串内容
function stripBOM(content) {
 // 检测第一个字符是否为BOM
 if (content.charCodeAt(0) === 0xFEFF) {
 content = content.slice(1);
 }
 return content;
}
 
// 对于Buffer
function stripBOMBuffer(buf) {
 if (buf[0] === 0xEF && buf[1] === 0xBB && buf[2] === 0xBF) {
 buf = buf.slice(3);
 }
 return buf;
}

(编辑:91站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读