unhex('6BFD3D0AFDFD4E01FDFD67703A34757F')
を使用してBLOBを格納するSQLデータベースがあります。ノードバッファを使用したutf-8での文字列のシリアル化
サーバは、blobを取得し、ノードバッファに<Buffer 6b 8a 3d 0a 9b eb 4e 01 96 a6 67 70 3a 34 75 7f>
と格納します。
サーバーはバッファをシリアル化し、buffer.toString()
を使用してクライアントに送信します。デフォルトは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>
になりBuffer.from(buffer, 'utf8')
を使用してバッファを、と私は.toString('hex')
を使用して六角に戻ってそれを変換する場合、私は6BEFBFBD3D0AEFBFBDEFBFBD4E01EFBFBDEFBFBD67703A34757F
を取得します。私がやるのであればをそれをすべてを合計する
は、:
let startHex = "6BFD3D0AFDFD4E01FDFD67703A34757F"
let buffer = Buffer.from(hex, 'hex')
let endHex = Buffer.from(buffer.toString()).toString('hex').toUpperCase())
console.log(endHex)
出力は次のとおりです。
startHex
とendHex
異なるが、なぜ私の質問はありますか?彼らはただ違うだけではありません。 endHex
に余分な文字がある以外は同様です。 base64
またはbinary
を使用してサーバーとクライアントの間でバッファーをシリアル化すると正しい出力が得られることがわかりますが、クライアントがを使用してstartHex
のシリアル化されたバッファーを見つけ出すことができれば簡単です。その理由は、クライアントに送信する前に実際にbuffer.toString()
を呼び出すサーバーの内部動作にアクセスできないため、エンコードを変更できないためです。