【发布时间】:2017-01-31 22:41:58
【问题描述】:
我有一个使用 unhex('6BFD3D0AFDFD4E01FDFD67703A34757F') 存储 blob 的 sql 数据库。
服务器检索 blob 并将其作为 <Buffer 6b 8a 3d 0a 9b eb 4e 01 96 a6 67 70 3a 34 75 7f> 存储在节点缓冲区中。
服务器序列化缓冲区并使用buffer.toString() 将其发送到客户端,默认为utf8 编码。
客户端使用Buffer.from(buffer, 'utf8')接收和反序列化缓冲区,结果为<Buffer 6b ef bf bd 3d 0a ef bf bd ef bf bd 4e 01 ef bf bd ef bf bd 67 70 3a 34 75 7f>,然后如果我使用.toString('hex')将其转换回十六进制,我得到6BEFBFBD3D0AEFBFBDEFBFBD4E01EFBFBDEFBFBD67703A34757F。
总结一下,如果我这样做了:
let startHex = "6BFD3D0AFDFD4E01FDFD67703A34757F"
let buffer = Buffer.from(hex, 'hex')
let endHex = Buffer.from(buffer.toString()).toString('hex').toUpperCase())
console.log(endHex)
输出是:
6BEFBFBD3D0AEFBFBDEFBFBD4E01EFBFBDEFBFBD67703A34757F
我的问题是为什么startHex 和endHex 不同?它们不仅不同。除了 endHex 有多余的字符外,它们看起来很相似。我知道如果我使用base64 或binary 序列化服务器和客户端之间的缓冲区,我会得到正确的输出,但是对于我的项目,如果客户端能够在使用序列化缓冲区的情况下找出startHex 会更容易utf8。原因是在发送到客户端之前我无法访问实际调用buffer.toString()的服务器的内部工作,所以我无法更改编码。
【问题讨论】:
标签: sql node.js utf-8 hex buffer