HarmonyOS 鸿蒙Next rcp get请求传参编码问题

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

HarmonyOS 鸿蒙Next rcp get请求传参编码问题

let paramsObject  = new url.URLParams();
paramsObject.set(key,String(value));
request.url.search = paramsObject.toString();

当参数值value中又特殊字符如+ / 等  以上代码设置完之后  获取到的参数分别对特殊字符进行了两次encode   分别是paramsObject.toString()的值encode了一次  以及赋值给request.url.search后  又一次 ,但是如果request.url.search= 未encod 的值 则一次encode也不会,这种情况应该怎么处理


更多关于HarmonyOS 鸿蒙Next rcp get请求传参编码问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

你好,在环境上已经验证过,request.url.search = paramsObject.toString()不会对歧义字符转义两次,只是在toString时会转义,如“+”会被转义为“%2B”,赋值给request.url.search后,request.url.search使用log打印时也是为“%2B”,如果将paramsObject.toString()的字符串使用decodeURIComponent解码,则request.url.search变为“+”,具体代码如下,运行结果见注释:

import { url, util } from '@kit.ArkTS';
import { request } from '@kit.BasicServicesKit';
import { rcp } from '@kit.RemoteCommunicationKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    RelativeContainer() {
      Row(){
        Image('media/Photo/17/IMG_1735268301_016/001.webp')
      }.onClick(() =>{
        let urlObject = url.URL.parseURL('https://developer.exampleUrl/?fod=1&bard=2');
        console.log('urlObject slice 1 ' + urlObject.search.slice(1));   //结果为:fod=1&bard=2
        let params = new url.URLParams(urlObject.search.slice(1));
        params.set('baz', '3+'); // Add a third parameter.
        let headers: rcp.RequestHeaders = {
          "accept": "application/json"
        };
        let content = "data to send";
        let configuration: rcp.Configuration = {
          transfer: {
            timeout: { connectMs: 60000, transferMs: 60000 }
          }
        };
        let cookies: rcp.RequestCookies = { 'name1': 'value1', 'name2': 'value2' };
        let transferRange: rcp.TransferRange = { from: 100, to: 200 };
        let req = new rcp.Request("http://example.com", "POST", headers, content, cookies, transferRange, configuration);
        console.log('params.toString() ' + params.toString());   //结果为:fod=1&bard=2&baz=3%2B
        req.url.search = params.toString();
        console.log('req.url.search' + req.url.search);          //结果为:?fod=1&bard=2&baz=3%2B
        req.url.search = decodeURIComponent(params.toString());
        console.log('req.url.search decodeURIComponent' + req.url.search);//结果为:?fod=1&bard=2&baz=3+
      })
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next rcp get请求传参编码问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,处理Next rcp(Remote Procedure Call)的get请求传参编码问题时,通常涉及的是参数的序列化和反序列化过程。针对编码问题,这里直接提供核心处理思路:

  1. 明确参数类型:首先确认传参的具体数据类型,包括基本数据类型(如int, float)和复杂数据类型(如结构体、字符串)。

  2. 使用标准编码:对于字符串类型的参数,建议使用UTF-8编码,以确保在不同设备间传输时编码一致,避免乱码。

  3. 序列化处理:在发送方,将参数按约定好的格式进行序列化,通常是通过JSON、XML或其他协议格式。鸿蒙系统可能提供特定的序列化工具或库,应充分利用。

  4. 反序列化接收:在接收方,对接收到的数据进行反序列化,恢复成原始参数类型。同样,应使用与发送方一致的解码方式。

  5. 测试验证:通过单元测试或集成测试,验证序列化与反序列化过程的正确性,确保参数在传输过程中无丢失或变形。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。该客服团队可以提供更专业的技术支持和解决方案。

回到顶部