news 2026/7/7 16:41:27

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 16:36:01

DC-DC降压转换器与PIC单片机在智能电源设计中的应用

1. 项目背景与核心器件选型 在嵌入式电源设计中,DC-DC降压转换是基础但关键的技术环节。本项目采用171010550(经查证为TI的TPS62110A芯片)与Microchip的PIC18F87J60单片机组合,构建可编程降压电源系统。这种方案特别适合需要网络远…

作者头像 李华
网站建设 2026/7/7 16:33:48

LLM辅助数据库Schema设计:从自然语言需求到DDL的智能转换与审查

LLM辅助数据库Schema设计:从自然语言需求到DDL的智能转换与审查 一、PRD到DDL的"翻译损耗":一个被严重低估的工程问题 产品经理在 PRD 中写下"需要一个用户积分系统,支持积分获取、消费和过期",但到技术方案…

作者头像 李华
网站建设 2026/7/7 16:26:03

3步搞定音乐格式转换:解锁音乐自由的终极指南

3步搞定音乐格式转换:解锁音乐自由的终极指南 【免费下载链接】unlock-music 音乐解锁:移除已购音乐的加密保护。 目前支持网易云音乐(ncm)、QQ音乐(qmc, mflac, tkm, ogg) 。此版本为预构建版本。 项目地址: https://gitcode.com/gh_mirrors/unl/unlo…

作者头像 李华
网站建设 2026/7/7 16:18:27

如何在15分钟内完成黑苹果EFI配置:智能自动化工具完整指南

如何在15分钟内完成黑苹果EFI配置:智能自动化工具完整指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而头疼吗…

作者头像 李华
网站建设 2026/7/7 16:16:47

AI写教材大揭秘:4款低查重AI工具推荐,轻松搞定教材编写难题!

在教材的编写过程中,如何在原创性与合规性之间找到平衡,是一个非常重要的问题。一方面,我们希望能借鉴优秀教材中的精华,但又担心自己的内容重复率过高;另一方面,当我们努力实现原创时,又担心逻…

作者头像 李华