gpt4 book ai didi

javascript - 如何将 uint8 数组转换为 base64 编码的字符串?

转载 作者:IT王子 更新时间:2023-10-29 02:51:29 32 4
gpt4 key购买 nike

我有一个 webSocket 通信,我收到 base64 编码的字符串,将它转换为 uint8 并处理它,但现在我需要发回,我得到了 uint8 数组,需要将它转换为 base64 字符串,所以我可以发送。我怎样才能进行这种转换?

最佳答案

如果您的数据可能包含多字节序列(不是普通的 ASCII 序列)并且您的浏览器有 TextDecoder ,那么您应该使用它来解码您的数据(为 TextDecoder 指定所需的编码):

var u8 = new Uint8Array([65, 66, 67, 68]);
var decoder = new TextDecoder('utf8');
var b64encoded = btoa(decoder.decode(u8));

如需支持browsers that do not have TextDecoder (目前只有 IE 和 Edge),那么最好的选择是使用 TextDecoder polyfill .

如果您的数据包含纯 ASCII(不是多字节 Unicode/UTF-8),那么有一个使用 String.fromCharCode 的简单替代方案应该得到相当普遍的支持:

var ascii = new Uint8Array([65, 66, 67, 68]);
var b64encoded = btoa(String.fromCharCode.apply(null, ascii));

并将 base64 字符串解码回 Uint8Array:

var u8_2 = new Uint8Array(atob(b64encoded).split("").map(function(c) {
return c.charCodeAt(0); }));

如果您有非常大的数组缓冲区,那么应用可能会失败,您可能需要对缓冲区进行分 block (基于@RohitSengar 发布的)。再次注意,只有当您的缓冲区仅包含非多字节 ASCII 字符时,这才是正确的:

function Uint8ToString(u8a){
var CHUNK_SZ = 0x8000;
var c = [];
for (var i=0; i < u8a.length; i+=CHUNK_SZ) {
c.push(String.fromCharCode.apply(null, u8a.subarray(i, i+CHUNK_SZ)));
}
return c.join("");
}
// Usage
var u8 = new Uint8Array([65, 66, 67, 68]);
var b64encoded = btoa(Uint8ToString(u8));

关于javascript - 如何将 uint8 数组转换为 base64 编码的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12710001/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com