如何将 FileSync 音频作为字符串读取,然后将其作为音频写入 FileSync?

How do I readFileSync audio as a string and then writeFileSync it back as audio?

我有以下内容:

const fileAsString = fs.readFileSync('speech.mp3', { encoding: 'utf-8' })
const encryptedString = encrypt(fileAsString)
const decryptedString = decrypt(encryptedString)

console.log(fileAsString === decryptedString) // this returns true

fs.writeFileSync('speech_copy.mp3', decryptedString, { encoding: 'utf-8' })

speech_copy.mp3 已创建,但无法再播放,因为我弄乱了它的编码。

我在这个过程中做错了什么?我最初使用 { encoding: 'utf-8' } 读取文件的唯一原因是我可以对其进行加密然后再次解密。当我将它写回一个新文件时,我应该使用不同的 encoding 吗?

使用二进制数据的 base64 表示通常是更好的方法:

const fs = require('fs');

// binary -> base64
const fileAsString = fs.readFileSync('speech.mp3').toString('base64');
const encryptedString = encrypt(fileAsString);
const decryptedString = decrypt(encryptedString);

// base64 -> binary
fs.writeFileSync('speech_copy.mp3', Buffer.from(decryptedString , 'base64'));