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

Posted

技术标签:

【中文标题】Flutter/Dart json 用特殊字符编码密码【英文标题】:Flutter/Dart json encode passwords with special characters 【发布时间】:2021-01-25 19:59:51 【问题描述】:

我不熟悉 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",
 "entity": "",
 "reset" 0

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

【问题讨论】:

【参考方案1】:

Uri.decodeComponent("123%40abc") = 123@abc

【讨论】:

【参考方案2】:

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

 Uri.encodeComponent("example@#");

从服务器获取数据使用:

Uri.decodeComponent("example@#");

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

【讨论】:

以上是关于Flutter/Dart json 用特殊字符编码密码的主要内容,如果未能解决你的问题,请参考以下文章

Flutter/Dart:读取文本文件以奇怪的字符为前缀

Flutter - 带有 Dart 的通用 json 序列化器

使用 PHP 从数据库中检索图像并在 Flutter 项目中使用(在 Dart 中)

在 Flutter/Dart 中从 JSON 数组中提取数据

如何在 Flutter/Dart 中使用 url 编码的标头和正文发出 HTTP POST 请求

Flutter/Dart JSON 和现有库类的序列化