Dart base64 解码

Len*_*n_X 0 dart flutter

这是我的 base64 编码字符串:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiJkMjNiN2ViMy03MDgyLTRkZDktOGQ0OC1lMjU2YTM3OTNiOTciLCJyZWZyZXNoVG9rZW4iOiJiN2M3MTc4Yi04OWRjLTQxMDctYjUzNC1hOGZiOTNhMzEwNzAiLCJuYW1lIjoiTGVuIiwiaWF0IjoxNTczMDI4MjU2fQ
Run Code Online (Sandbox Code Playgroud)

使用https://jwt.io/它可以正确解码但是当尝试base64.decode('--Base64String--);在 Flutter 中使用时它给了我这些错误

FormatException: Invalid character (at character 37)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiIzYWNiNzBjZS0wYzYxLT...
Run Code Online (Sandbox Code Playgroud)

当删除前面的字符串时.(我只需要后面的信息.)我收到这个错误

FormatException: Invalid length, must be multiple of four (at character 183)
...jLTQxMDctYjUzNC1hOGZiOTNhMzEwNzAiLCJuYW1lIjoiTGVuIiwiaWF0IjoxNTczMDI4MjU2fQ
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以为 Dart 解码 base64 编码的字符串

小智 9

你可以base64.normalize先用。

例如:

import 'dart:convert';

void main() {
  final String b64 = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiJkMjNiN2ViMy03MDgyLTRkZDktOGQ0OC1lMjU2YTM3OTNiOTciLCJyZWZyZXNoVG9rZW4iOiJiN2M3MTc4Yi04OWRjLTQxMDctYjUzNC1hOGZiOTNhMzEwNzAiLCJuYW1lIjoiTGVuIiwiaWF0IjoxNTczMDI4MjU2fQ';

  String foo = b64.split('.')[0];
  List<int> res = base64.decode(base64.normalize(foo));

  print(utf8.decode(res));
}
Run Code Online (Sandbox Code Playgroud)

结果:

{"alg":"HS256","typ":"JWT"}
Run Code Online (Sandbox Code Playgroud)