Dart Angular 和 JSON 编码
Dart Angular and JSON encoding
我正在处理的应用程序存在编码问题。写在 Angular Dart 中,后端有 Spring Boot。
这些是我用于请求的变量,以及 header 和指定的字符集。
static final _headers = {'Content-Type': 'application/json; charset=utf-8', "Access-Control-Allow-Origin": "Origin"};
Uri _loginUri = new Uri(scheme: 'http', host: "localhost", path: 'api/login', port: 8080);
这就是我调用方法的方式
Future<LoginResponse> login(String tessera, String password) async {
try {
final response = await _http.post(_loginUri, headers: _headers,
body: json.encode({"tessera" : tessera, "password" : password}));
print(response.body);
return LoginResponse.fromJson(json.decode(response.body));
} catch (e) {
throw _handleError(e);
}
}
class LoginResponse {
String authToken;
String sessionToken;
int tessera;
String firstName;
String lastName;
LoginResponse(this.authToken, this.tessera, this.firstName, this.lastName, this.sessionToken);
factory LoginResponse.fromJson(Map<String, dynamic> response) {
return LoginResponse(response['authToken'], response['tessera'], response['firstName'], response['lastName'], response['sessionToken']);
}
}
这是服务器给我的答案
{"errorMessage":null,"sessionToken":"2dc546d7-8f0a-435a-bc49-c64ae7de1d49","tessera":326,"firstName":"Valerio","lastName":"Borsò","error":false}
但是在解码之后我得到的字段姓氏有错误的字符而不是 ò。
{"errorMessage":null,"authToken":"2f69ad50-5124-44fd-8de0-54fb634a8435","sessionToken":"f46fd67b-735f-4384-86a5-72d2863dd2ab","tessera":326,"firstName":"Valerio","lastName":"Borsò","error":false}
response.body
使用您的响应 headers 中的 charset
解码,但如果未指定
,默认情况下将使用 latin1
解码
https://pub.dev/documentation/http/latest/http/Response/body.html
您可以尝试使用 utf8
(或其他方式)自行解码 body
final responseBody = utf8.decode(response.bodyBytes);
final jsonBody = json.decode(responseBody);
我正在处理的应用程序存在编码问题。写在 Angular Dart 中,后端有 Spring Boot。 这些是我用于请求的变量,以及 header 和指定的字符集。
static final _headers = {'Content-Type': 'application/json; charset=utf-8', "Access-Control-Allow-Origin": "Origin"};
Uri _loginUri = new Uri(scheme: 'http', host: "localhost", path: 'api/login', port: 8080);
这就是我调用方法的方式
Future<LoginResponse> login(String tessera, String password) async {
try {
final response = await _http.post(_loginUri, headers: _headers,
body: json.encode({"tessera" : tessera, "password" : password}));
print(response.body);
return LoginResponse.fromJson(json.decode(response.body));
} catch (e) {
throw _handleError(e);
}
}
class LoginResponse {
String authToken;
String sessionToken;
int tessera;
String firstName;
String lastName;
LoginResponse(this.authToken, this.tessera, this.firstName, this.lastName, this.sessionToken);
factory LoginResponse.fromJson(Map<String, dynamic> response) {
return LoginResponse(response['authToken'], response['tessera'], response['firstName'], response['lastName'], response['sessionToken']);
}
}
这是服务器给我的答案
{"errorMessage":null,"sessionToken":"2dc546d7-8f0a-435a-bc49-c64ae7de1d49","tessera":326,"firstName":"Valerio","lastName":"Borsò","error":false}
但是在解码之后我得到的字段姓氏有错误的字符而不是 ò。
{"errorMessage":null,"authToken":"2f69ad50-5124-44fd-8de0-54fb634a8435","sessionToken":"f46fd67b-735f-4384-86a5-72d2863dd2ab","tessera":326,"firstName":"Valerio","lastName":"Borsò","error":false}
response.body
使用您的响应 headers 中的 charset
解码,但如果未指定
latin1
解码
https://pub.dev/documentation/http/latest/http/Response/body.html
您可以尝试使用 utf8
(或其他方式)自行解码 body
final responseBody = utf8.decode(response.bodyBytes);
final jsonBody = json.decode(responseBody);