Node.js fs.readFile返回的原始缓冲区未正确将某些字符转换为十进制值

Node.js fs.readFile返回的原始缓冲区未正确将某些字符转换为十进制值,node.js,websocket,fs,gltf,Node.js,Websocket,Fs,Gltf,我在.glb文件中有一些数据,其开头如下: Buffer@0x0000020A2BF455D0 67 6c 54 46 02 00 00 00 a4 d6 01 00 40 08 00 00 4a 53 4f 4e 7b ... Buffer@0x000001DD07B0E590 67 6C 54 46 02 20 20 20 C2 A4 C3 ... glTFÖ@JSON 我使用以下代码读取文件: fs.readFile(file, (err, data) => {

我在.glb文件中有一些数据,其开头如下:

Buffer@0x0000020A2BF455D0 67 6c 54 46 02 00 00 00 a4 d6 01 00 40 08 00 00 4a 53 4f 4e 7b ... 
Buffer@0x000001DD07B0E590 67 6C 54 46 02 20 20 20 C2 A4 C3 ... 
glTFÖ@JSON

我使用以下代码读取文件:

fs.readFile(file,  (err, data) => {

    if (err) console.log(err);

    var message = {
        "Message": "glb_string",
        "Item": data
    }
    ws.send(JSON.stringify(message));
});
并使用websocket连接将其发送到客户端websocket服务器

但是,fs.readFile返回的节点缓冲区如下所示:

Buffer@0x0000020A2BF455D0 67 6c 54 46 02 00 00 00 a4 d6 01 00 40 08 00 00 4a 53 4f 4e 7b ... 
Buffer@0x000001DD07B0E590 67 6C 54 46 02 20 20 20 C2 A4 C3 ... 
这些值不正确。它以utf-8格式正确显示简单字母:

g(67) l(6c) T(54) F(46)
但一旦它到达特殊字符,如·Ö和Ö,缓冲区将返回00。缓冲区应如下所示:

Buffer@0x0000020A2BF455D0 67 6c 54 46 02 00 00 00 a4 d6 01 00 40 08 00 00 4a 53 4f 4e 7b ... 
Buffer@0x000001DD07B0E590 67 6C 54 46 02 20 20 20 C2 A4 C3 ... 
或以十进制形式:

103 108 84 70 2 32 32 32 164 214 1 32 64 8 32 32 74 83 79 78

2 is "stx start of text ctrl-b"
1 is "soh start of heading ctrl-a"
164 is ¤ 
214 is Ö
不确定返回的原始缓冲区为什么没有为这些特殊字符使用正确的值。因此,.glb文件不可用


谢谢您的帮助。

可能是个愚蠢的问题,但您是否已使用十六进制编辑器检查了文件?我只是使用您的示例字符串进行了尝试,当我通过
xxd
(linux命令行)查看文件的十六进制时,得到的结果与
fs.readFile
完全相同。我没有尝试过,我所做的是将字符串放入这个网站:这一切背后的真正原因是我试图传输一个.glb文件,这是一个二进制gltf文件,完整地跨websocket连接。为此,我必须读取.glb文件,通过JSON.stringify发送,然后在客户端对其进行解码。到目前为止,我还无法对.glb服务器端进行编码,通过websocket将其发送到客户端,然后在客户端对其进行解码并保持.glb文件正常工作。客户端上生成的.glb文件不可由gltf查看器使用。嗯,您是对的,十六进制编辑器与fs.readFile看起来完全相同。我认为我的代码不起作用的原因是.glb文件规范需要一个12字节的头,而转换器没有考虑到这一点。