Flutter / Dart json使用特殊字符编码密码

问题描述

我是Flutter编程和工作的新手。我正在尝试使用发布请求登录到API。

模型(用于app.quicktype.io)

import 'dart:convert';

class UserLogin {
  UserLogin({
    this.login,this.password,this.entity,this.reset,});

  String login;
  String password;
  String entity;
  int reset;

  factory UserLogin.fromrawJson(String str) =>
      UserLogin.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory UserLogin.fromJson(Map<String,dynamic> json) => UserLogin(
        login: json["login"],password: json["password"],entity: json["entity"],reset: json["reset"],);

  Map<String,dynamic> toJson() => {
        "login": login,"password": password,"entity": entity,"reset": reset,};
}



String loginJason = json.encode(
        UserLogin(login: login,password: password,entity: "",reset: 0));

请求:

static Future apiLogin(
   String url,String login,String password,String loginJason) async {
        var response = await http.post(url,headers: {'Content-Type': 'application/json'},body: loginJason);

请求的正文应如下所示:

{"login":"login","password":"password","entity": "","reset" 0
}

密码中使用特殊字符(例如“ 123 @ abc”)之前,一切正常,然后dart像这样对主体进行编码:

{"login":"login","password":"123%40abc","reset" 0
}

密码不再有效,因为该密码已重新格式化(Html-Escape)。如何防止重新格式化密码

解决方法

Uri.decodeComponent(“ 123%40abc”)= 123 @ abc

,

如果您想使用 Http (Flutter) 将 # 或 @ 相关字符串发送到服务器,则大多数问题与 # 或 @ 字符有关,您可以这样做:

 Uri.encodeComponent("example@#");

从服务器获取数据使用:

Uri.decodeComponent("example@#");

主要是特殊字符需要的Uri编码/解码