登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [js/javascript+]Uint8Array 兼容性 - 及 base64 官方处理中文的方式     [回主站]     [分站链接]
[js/javascript+]Uint8Array 兼容性 - 及 base64 官方处理中文的方式
clq
浏览(240) - 2024-07-05 13:50:33 发表 编辑

关键字:

[2024-07-05 19:01:19 最后更新]
[js/javascript+]Uint8Array 兼容性 - 及 base64 官方处理中文的方式

应该是 2015 年后的系统都支持。

https://github.com/stdlib-js/array-uint8

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array

"彻底说清楚 Javascript 如何处理二进制"
https://segmentfault.com/a/1190000044513727

--------------------------------------------------------
另外还有个奇怪的语法

https://zhuanlan.zhihu.com/p/646009286

以下是一个示例,演示如何对二进制数据进行Base64编码:

let binaryData = 'Hello World!'.split('').map(c => c.charCodeAt(0)); // 将字符串转换为二进制数据

let base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

let base64Data = '';
let remainder = 0;
let remainderSize = 0;
for (let i = 0; i < binaryData.length; i++) {
let byte = binaryData[i];
let char1 = base64Chars[(byte >> 2) & 0x3f];
let char2 = base64Chars[((byte << 4) + remainder) & 0x3f];
base64Data += char1 + char2;
remainder = (byte << 2) & 0x3f;
remainderSize += 2;
if (remainderSize == 6) {
base64Data += base64Chars[remainder];
remainder = 0;
remainderSize = 0;
}
}
if (remainderSize > 0) {
base64Data += base64Chars[remainder];
base64Data += '=';
if (remainderSize == 2) {
base64Data += '=';
}
}

console.log(base64Data); // 输出 "SGVsbG8gV29ybGQh"



在这个示例中,我们首先将字符串'Hello World!'转换为二进制数据。然后,我们按6比特的块将二进制数据分组,并对每个块进行Base64编码。最后,将所有的编码块组合起来,得到了Base64编码后的结果。

--------------------------------------------------------
--------------------------------------------------------
与之相关的常见的 base64 官方处理中文的方式。
//--------------------------------------------------------
//https://blog.csdn.net/weixin_45609589/article/details/129325047
//对于atob,btoa编码汉字报错这个问题,之前一直以为是汉字不能转base64,前几天看了一下文档,原来MDN文档里面早就有说明的
//备注: btoa() 需要传入二进制数据,如果给定的字符串包含任何 UTF-16 表示的字符占据一个以上的字节,则会抛出一个异常。
//所以对于字节数大于8位的字符,atob,btoa会报错,官网里面给了几个方法

//TextEncoder 从什么时候可以用?//从文档上看应该是 2015 之后的
//var v_ = btoa(new TextEncoder().encode("中文123")); //这个还是不行


//来自
//https://developer.mozilla.org/zh-CN/docs/Glossary/Base64#%E6%96%B9%E6%A1%881%E2%80%94%E2%80%94%E5%85%88%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6%E4%B8%B2
//
function base64ToBytes(base64) {
const binString = atob(base64);
return Uint8Array.from(binString, (m) => m.codePointAt(0));
}//

function bytesToBase64(bytes) {
const binString = Array.from(bytes, (byte) =>
String.fromCodePoint(byte),
).join("");
return btoa(binString);
}//

//var v_ = bytesToBase64(new TextEncoder().encode("a Ā 𐀀 文 🦄")); // "YSDEgCDwkICAIOaWhyDwn6aE"
var v_ = bytesToBase64(new TextEncoder().encode("中文123"));


//window.webkit.messageHandlers.observer.postMessage({ 'key': 'value' });
window.webkit.messageHandlers.observer.postMessage(v_);





总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1