尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Base64工具库:编码与解码工具类(239)

Base64工具库:编码与解码工具类(239)
📅 发布时间:2026/7/22 17:27:02

在鸿蒙(HarmonyOS)应用开发中,Base64 编码与解码是处理二进制数据与文本协议转换的基石,广泛应用于 Token 传输、图片转字符串、文件加密等场景。

鸿蒙官方提供了底层且高性能的buffer模块,同时社区也封装了更为便捷的Base64Util工具类

一、 官方原生方案:Buffer 模块实战

场景:在不引入第三方库的情况下,利用鸿蒙原生的@kit.ArkTS中的buffer模块,实现字符串与 Base64 之间的双向转换。

import { buffer } from '@kit.ArkTS'; // 1. 字符串编码为 Base64 const plainText = 'Hello HarmonyOS'; const base64Str = buffer.from(plainText, 'utf-8').toString('base64'); console.info('编码结果:', base64Str); // 输出: SGVsbG8gSGFybW9ueU9T // 2. Base64 解码还原为字符串 const decodedText = buffer.from(base64Str, 'base64').toString('utf-8'); console.info('解码结果:', decodedText); // 输出: Hello HarmonyOS // 3. 处理二进制文件(如图片)的 Base64 转换 const imageArray = new Uint8Array([0x89, 0x50, 0x4E, 0x47]); // 模拟图片字节 const imageBase64 = buffer.from(imageArray).toString('base64');

二、 社区进阶方案:Base64Util 工具类

场景:在大型项目中,将 Base64 的转换逻辑、异常捕获和 URL 安全处理封装为全局单例工具类,提升代码复用率。

import { buffer } from '@kit.ArkTS'; export class Base64Util { // 1. 标准 Base64 编码 static encode(input: string | Uint8Array): string { try { if (typeof input === 'string') { return buffer.from(input, 'utf-8').toString('base64'); } return buffer.from(input).toString('base64'); } catch (err) { console.error('Base64 编码失败:', err); return ''; } } // 2. 标准 Base64 解码 static decode(base64Str: string): string { try { return buffer.from(base64Str, 'base64').toString('utf-8'); } catch (err) { console.error('Base64 解码失败:', err); return ''; } } // 3. URL 安全的 Base64 编码(将 + 替换为 -,/ 替换为 _,去掉 =) static encodeUrlSafe(input: string): string { return Base64Util.encode(input).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); } }

三、 高阶实战:大文件流式 Base64 转换

场景:当需要处理几 MB 甚至更大的文件(如视频、高清图片)时,直接将其全部转为 Base64 会导致内存溢出(OOM)。必须采用分片读取与转换策略。

import { fileIo as fs } from '@kit.CoreFileKit'; import { Base64Util } from './Base64Util'; async function largeFileToBase64(filePath: string): Promise<string> { const file = fs.openSync(filePath, fs.OpenMode.READ_ONLY); const chunkSize = 3 * 1024; // 每次读取 3KB(3的倍数,避免 Base64 截断错位) const bufferArray = new Uint8Array(chunkSize); let base64Result = ''; let readLen = 0; while ((readLen = fs.readSync(file.fd, bufferArray)) > 0) { const chunk = bufferArray.subarray(0, readLen); base64Result += Base64Util.encode(chunk); } fs.closeSync(file); return base64Result; }
  1. 内存膨胀预警:Base64 编码会使数据体积增加约33%。在处理大文件时,严禁在主线程一次性转换,必须结合TaskPool分片处理,防止引发应用崩溃。
  2. URL 传参陷阱:标准的 Base64 包含+和/字符,在作为 URL 参数传递时会被浏览器或服务器错误转义。涉及网络传输时,务必使用 URL 安全的 Base64 变体(URL-Safe Base64)。
  3. 去除 BOM 头:在解码由其他系统生成的 Base64 字符串时,可能会遇到隐藏的 BOM 头导致解码乱码。建议在解码前执行base64Str.trim()清理首尾空白字符。
  4. 图片预览规范:如果将 Base64 字符串直接赋值给鸿蒙Image组件的src属性,必须加上数据 URI 前缀,例如:data:image/png;base64,${base64Str},否则图片将无法渲染。

四、 官方 Base64Helper :完整的编码与解码管道

场景:使用鸿蒙官方推荐的util.Base64Helper结合TextEncoder/TextDecoder,构建标准的字符串与 Base64 互转管道,彻底解决中文乱码问题。

import { util } from '@kit.ArkTS'; export class Base64Pipe { // 字符串 -> Base64 static encode(input: string): string { let encoder = new util.TextEncoder('utf-8'); let uint8Array = encoder.encodeInto(input); let helper = new util.Base64Helper(); return helper.encodeToStringSync(uint8Array); } // Base64 -> 字符串 static decode(input: string): string { let helper = new util.Base64Helper(); let uint8Array = helper.decodeSync(input); let decoder = util.TextDecoder.create('utf-8'); // 注意:使用静态工厂方法 return decoder.decodeToString(uint8Array); } }

五、高阶封装:支持同步/异步与 Uint8Array 转换

场景:在复杂业务中,既需要处理文本,也需要处理二进制文件(Uint8Array),同时需要异步方法避免阻塞主线程。

import { util } from '@kit.ArkTS'; export class Base64Util { private static createHelper(): util.Base64Helper { return new util.Base64Helper(); } // 二进制编码为 Base64 字符串(同步) static encodeToStrSync(array: Uint8Array): string { return Base64Util.createHelper().encodeToStringSync(array); } // Base64 解码为二进制(异步) static async decode(input: string): Promise<Uint8Array> { return Base64Util.createHelper().decode(input); } }

六、图片与 PixelMap :Base64 与图像互转

场景:将相册选中的图片转为 Base64 字符串用于上传,或将网络返回的 Base64 字符串还原为 PixelMap 进行 UI 展示。

import { image, util } from '@kit.ArkTS'; // 将图片二进制数据转为 Base64 function pixelMapToBase64(pixelMap: image.PixelMap): string { let num = pixelMap.getPixelBytesNumber(); let readBuffer = new ArrayBuffer(num); pixelMap.readPixelsToBufferSync(readBuffer); let helper = new util.Base64Helper(); return helper.encodeToStringSync(new Uint8Array(readBuffer)); } // 将 Base64 还原为 PixelMap function base64ToPixelMap(base64Str: string, width: number, height: number): image.PixelMap { let helper = new util.Base64Helper(); let imageUint8 = helper.decodeSync(base64Str).buffer; let opts: image.InitializationOptions = { editable: true, size: { height: height, width: width } }; return image.createPixelMapSync(imageUint8, opts); }

相关新闻

  • Vue3数据绑定与列表渲染实战指南
  • 电商账务别等年底才补,拉萨市柳梧新区电商企业财税服务公司推荐 - 子柔传媒
  • 深入解析嵌入式SoC电源与休眠控制器PSC:低功耗设计核心

最新新闻

  • TMS570系统控制寄存器深度解析:从奇偶校验到时钟配置实战
  • 打算处理多款腕表,无锡名表回收选合扬一站式估价,热门款式保值盘点 - 好物测评局
  • Claude Code智能编程助手:功能解析与高效使用指南
  • 嵌入式PRCM模块实战:电源、复位、时钟域配置与低功耗设计
  • 线上投票活动如何制作?2026年扫码即投的创建工具推荐 - 微信投票制作
  • 嵌入式GPMC控制器配置:从地址解码到WAIT引脚时序优化实战

日新闻

  • AI云原生实战05-金融AI上云最难的不是技术,是“不出事“——TCE银行风控架构拆解
  • 2026年GEOSEO优化公司选型深度测评:五大硬核标准严选,这六家重塑搜索增长新格局 - 品牌前沿专家
  • **核验!2026年7月卡地亚香港**售后网点地址及服务电话公告 - 卡地亚服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号