首页 > 解决方案 > fs.readFile 返回的原始缓冲区未正确将某些字符转换为十进制值

问题描述

我在 .glb 文件中有一些数据,该文件的开头如下所示:

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 ... 

这些值不正确。它以 utf-8 形式得到正确的简单字母:

g(67) l(6c) T(54) F(46)

但是一旦遇到特殊字符,如 ¤ 和 Ö,缓冲区就会返回 00。缓冲区应该如下所示:

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 文件不可用。

感谢您的任何帮助。

标签: node.jswebsocketfsgltf

解决方案


推荐阅读