当前位置: 首页 > news >正文

HarmonyKit | 鸿蒙新特性 API:URL 编解码 encodeURIComponent 模式切换

HarmonyKit | 鸿蒙新特性 API:URL 编解码 encodeURIComponent 模式切换

引言:移动端 URL 编解码的三个场景

URL 编解码是 HarmonyKit 中使用频率排名前三的工具。追查 API 日志中%E4%BD%A0%E5%A5%BD这样的编码参数、构造带有中文关键词的搜索请求、解码被邮件客户端或聊天软件多次编码的链接——这些场景几乎每天都会遇到。

HarmonyKit 的 URL 编解码工具只有约 120 行代码,但围绕它有两个值得深入讨论的设计决策:encodeURIComponentencodeURI的行为差异、以及"模式切换按钮"与"双按钮布局"的权衡。

项目仓库:https://atomgit.com/VON-/harmony-kit

URL 编码原理:百分号编码

URL 设计规范(RFC 3986)规定了 URL 中允许出现的字符集。字母、数字、以及-_.~可以直接出现。其余所有字符——空格、中文、&=?#——都必须进行百分号编码。

规则:字符 → UTF-8 字节序列 → 每个字节写为%XX(XX 是十六进制值)。例:中文字符"你"的 UTF-8 编码是E4 BD A0,编码后是%E4%BD%A0

JavaScript 提供了两个编码函数,区别关键:

leturl='https://api.example.com/search?q=你好&page=1';encodeURI(url);// → 'https://api.example.com/search?q=%E4%BD%A0%E5%A5%BD&page=1'// URL 结构(: / ? = &)保留,只编码参数值中的中文encodeURIComponent(url);// → 'https%3A%2F%2Fapi.example.com%2Fsearch%3Fq%3D%E4%BD%A0%E5%A5%BD%26page%3D1'// 全部编码,包括 URL 结构字符

如果你用encodeURIComponent编码完整 URL 后放到浏览器地址栏,浏览器会把它当成一个参数值。反之,用encodeURI编码参数值,&不会被编码,服务器会把&当成参数分隔符导致参数截断。

Utils 层实现

exportclassUrlUtils{staticencode(input:string):string{returnencodeURIComponent(input);}staticdecode(input:string):string{returndecodeURIComponent(input);}staticencodeFull(input:string):string{returnencodeURI(input);}staticdecodeFull(input:string):string{returndecodeURI(input);}}

四个静态方法,两两配对。encode/decode对应参数编码,encodeFull/decodeFull对应完整 URL 编码。每个方法输入 string,输出 string。

decodeURIComponentdecodeURI对不合法的百分号序列(如残缺的%E0%A4%A)会抛出URIError。必须在 UI 层 try/catch 处理。

模式切换按钮

@Statemode:number=0;Button(this.mode===0?'模式: 参数编码':'模式: 完整URL').fontSize(11).height(28).backgroundColor('#f0f0f0').fontColor('#333').onClick(()=>{this.mode=this.mode===0?1:0;});

一个按钮显示当前模式。点击切换只一次操作。为什么不用两个按钮(如 Base64 的"编码|解码")?因为两种编码模式是互斥的选择——同方向、不同范围。切换按钮比两个独立按钮更准确表达"互斥"语义。

操作按钮和错误处理

编码按钮(蓝色 #007aff)和解码按钮(橙色 #ff9500)在模式切换按钮右侧。Blank()将两者推到两端。

doDecode(){if(!this.input.trim())return;try{this.output=this.mode===0?UrlUtils.decode(this.input):UrlUtils.decodeFull(this.input);}catch(e){this.output='解码失败,请检查输入';}}

URIError 的技术信息对非技术用户无帮助——"解码失败,请检查输入"是更友好的替代。

三个典型使用场景

API 调试%E4%BD%A0%E5%A5%BD→ 解码 → “你好”。快速人眼确认参数含义。

构造搜索链接:输入中文关键词 → 编码 → 拼接到搜索引擎 URL 后面。

修复双重编码:URL 经过邮件/聊天软件转发被多次编码(%%25),解码一次查看原始内容。

项目仓库:https://atomgit.com/VON-/harmony-kit

http://www.cnnetsun.cn/news/3206118.html

相关文章:

  • DC-DC降压转换器与PIC单片机在智能电源设计中的应用
  • LLM辅助数据库Schema设计:从自然语言需求到DDL的智能转换与审查
  • 3步搞定音乐格式转换:解锁音乐自由的终极指南
  • 区域小众地域服饰市场模拟程序,地方民俗特色服饰商业化盈利测算。
  • 如何在15分钟内完成黑苹果EFI配置:智能自动化工具完整指南
  • AI写教材大揭秘:4款低查重AI工具推荐,轻松搞定教材编写难题!
  • STM32与LV30条码扫描器的嵌入式系统设计与优化
  • PIC微控制器驱动压电蜂鸣器的警报系统设计
  • 计算机毕业设计之基于SSM旅游平台的设计与实现
  • TPAFE0808与PIC18F86J16的多通道信号采集系统设计
  • 如何快速配置 qBittorrent 搜索插件:新手完整指南
  • 高精度电压监控系统设计与PIC18F86K90应用实践
  • PicoRV32:重新定义嵌入式RISC-V开发的极简主义哲学
  • STM32与LP5812实现高效RGB灯光控制系统
  • 超越物理限制:com0com虚拟串口驱动器的架构哲学与实践智慧
  • 街边便利店为何越开越红火,消费者为何买账?
  • 嵌入式系统中M95M04 EEPROM与PIC18LF46K40的SPI存储方案
  • Draw.io ECE完整指南:专业电路图绘制的终极解决方案
  • Luyten:Java反编译从入门到精通的完整实战指南
  • PyTorch LSTM 与 GRU 对比:3 个 NLP 任务下的速度与精度实测
  • OpenCV 4.x 双边滤波实战:3个核心参数调优与卡通化效果量化分析
  • OpenCV 4.8 Canny边缘检测实战:3参数调优与医学影像分割,IoU提升15%
  • DropDownList使用layui后阻止值更改事件
  • 【人工智能】学习SKILL基础(中)
  • 2026亳州黄金回收白银回收铂金回收中检持证鉴定师铂金银饰高价回收门店联系方式推荐
  • FlipIt:Windows桌面上的复古翻页时钟,极简美学的终极选择
  • 多通道ADC信号采集系统设计与优化实践
  • Heimdallr:被动式浏览器安全插件在渗透测试中的实战应用
  • PIC18微控制器与74HC32实现高效键盘矩阵设计
  • Apache Shiro反序列化漏洞CVE-2016-4437:从原理到实战复现