Javascript 为什么Node.js会将BOM表字符转换为0xFE 0xFF?

Javascript 为什么Node.js会将BOM表字符转换为0xFE 0xFF?,javascript,node.js,character-encoding,Javascript,Node.js,Character Encoding,我一直在使用节点的fs.readFileSync(),将“utf8”作为读取输入的编码。当文件包含UTF8(0xEF 0xBF 0xBB)中的时,它将其转换为字节序列0xFE 0xFF,这是Unicode编码 为什么会这样?为什么不在UTF8中保留BOM的原始序列?BOM是字符U+FEFF。0xEF 0xBB 0xBF是其UTF-8表示形式。但是通过使用utf8编码读取,您就是在解码UTF-8。在这一点上,谈论“字节序列”变得毫无意义;您有一个字符串,第一个是U+FEFF。那么现在字符串中BOM

我一直在使用节点的
fs.readFileSync()
,将
“utf8”
作为读取输入的编码。当文件包含UTF8(0xEF 0xBF 0xBB)中的时,它将其转换为字节序列0xFE 0xFF,这是Unicode编码


为什么会这样?为什么不在UTF8中保留BOM的原始序列?

BOM是字符U+FEFF。0xEF 0xBB 0xBF是其UTF-8表示形式。但是通过使用utf8编码读取,您就是在解码UTF-8。在这一点上,谈论“字节序列”变得毫无意义;您有一个字符串,第一个是U+FEFF。

那么现在字符串中BOM字符的二进制值是多少?是0xFE 0xFF吗?我很难理解字节序列和基本上也是字节序列的字符之间的区别,即0xFE 0xFF是一个字节序列…@RickEyre作为
字符串
,它应该是一个单16位代码点--U+FEFF或
'\uFEFF'
。区别在于JavaScript
String
s是。因此,要从UTF-8
缓冲区
获取
字符串
,必须将其转换为UTF-16。