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 的通用 json 序列化器
使用 PHP 从数据库中检索图像并在 Flutter 项目中使用(在 Dart 中)
在 Flutter/Dart 中从 JSON 数组中提取数据