1
yuzhang98 May 5, 2023
v2ex polish 插件自带转换 base64
|
2
Valid May 5, 2023 什么,居然还要打开浏览器,我们都心算
|
3
superares May 5, 2023
问 GPT-4 也能得到结果
|
4
Tamamopoi May 5, 2023
学到了,现在的我已超越 7 年前端强者!
|
5
lqzhgood May 5, 2023
btoa 这到底是什么的缩写? 我每次记成 base64 To ASCII ,然后就和 atob 弄反了~
|
6
xieqiqiang00 OP @lqzhgood b 是二进制
|
7
lqzhgood May 5, 2023
@xieqiqiang00 那也这太不语义化了…… 说好的转 base64 的
|
8
pursuer May 5, 2023
我觉得这组 API 有点小问题,应该支持接收 ArrayBuffer 的,但实际还是要转。
|
9
DingJZ May 5, 2023
那个帖子是不是被删了,看完还想回味一下找不到了
|
10
jifengg May 5, 2023
当前的 btoa 和 atob 对 中文(或者说非 ascii )不太友好
|
11
ZhaokunZhang May 5, 2023 @DingJZ 没删,就是找不到了 https://v2ex.com/t/937283
|
12
zagfai May 5, 2023
base64 -d
|
13
codehz May 5, 2023 @jifengg @pursuer 实际上那 b 是 binarystring ,是在没有 typedarray ( uint8array, arraybuffer )时代的二进制 blob 替代品,你看上去是一个文本,它实际上可以存 0-255 所有的字符,不是仅限于 ascii ,也可以包含 utf-16 禁止的字符序列(反过来你即使 atob 把 utf-16 的中文 base64 结果转换为这个 binarystring 也是不能得到正确中文的)。
可以说是非常之奇妙,这玩意的构造方法就是用 String.fromCharCode ,古代的主流用法是 String.fromCharCode.apply(undefined, [1,2,3]) 来从数组里构造一整串 binarystring (用这个方法弄出来的字符串保证是 binarystring ,在一些优化过的引擎里不会用两倍空间存储) 因为过于魔法而难以进一步优化(比如一不小心就会退化成普通 string ,占用两份空间),所以 arraybuffer 才会被发明以取代 binarystring (然后因为 arraybuffer 不能轻易扩展长度,最近又在搞 resizable arraybuffer ) |