在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');
}
从这些页面中,我认为我已经正确地编写了这些函数,这样一个函数可以反转另一个函数:
- https://github.com/node-browser-compat/btoa/blob/master/index.js
- https://github.com/node-browser-compat/atob/blob/master/node-atob.js
- https://stackoverflow.com/a/47890385/470749
如果我将'binary'
选项改为'utf8'
,则测试通过。
但是我的数据库目前有这样的数据,这个函数似乎只有在我使用'binary'
时才起作用。
1条答案
按热度按时间g6baxovj1#
binary
是latin1
的别名'latin1'
:Latin-1代表ISO-8859-1。此字符编码仅支持从U+0000
到U+00FF
的Unicode字符。每个字符都使用单个字节进行编码。不符合该范围的字符将被截断,并Map到该范围内的字符。此字符集无法显示多字节utf8字符。
要获取utf8多字节字符,请直接转到
base64
,然后再返回