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);