NodeJS 缓冲区.from(base64编码字符串,“base64”).toString(“二进制”)与“utf8”

bxjv4tth  于 2023-02-15  发布在  Node.js
关注(0)|答案(1)|浏览(311)

在Node.js中:为什么这个测试在第二次调用main时失败?

test('base64Encode and back', () => {
  function main(input: string) {
    const base64string = base64Encode(input);
    const text = base64Decode(base64string);
    expect(input).toEqual(text);
  }

  main('demo');
  main('😉😉😉');
});

以下是我的功能:

export function base64Encode(text: string): string {
  const buffer = Buffer.from(text, 'binary');
  return buffer.toString('base64');
}

export function base64Decode(base64EncodedString: string): string {
  const buffer = Buffer.from(base64EncodedString, 'base64');
  return buffer.toString('binary');
}

从这些页面中,我认为我已经正确地编写了这些函数,这样一个函数可以反转另一个函数:

如果我将'binary'选项改为'utf8',则测试通过。
但是我的数据库目前有这样的数据,这个函数似乎只有在我使用'binary'时才起作用。

g6baxovj

g6baxovj1#

binarylatin1的别名
'latin1':Latin-1代表ISO-8859-1。此字符编码仅支持从U+0000U+00FF的Unicode字符。每个字符都使用单个字节进行编码。不符合该范围的字符将被截断,并Map到该范围内的字符。
此字符集无法显示多字节utf8字符。
要获取utf8多字节字符,请直接转到base64,然后再返回

function base64Encode(str) {
  return Buffer.from(str).toString('base64')
}
function base64Decode(str) {
  return Buffer.from(str, 'base64').toString()
}
> base64Encode('😉')
'8J+YiQ=='
> base64Decode('8J+YiQ==')
'😉'

相关问题