关于flutter:Dart base64解码

Dart base64 decoding

这是我的 base64 编码字符串:

1
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiJkMjNiN2ViMy03MDgyLTRkZDktOGQ0OC1lMjU2YTM3OTNiOTciLCJyZWZyZXNoVG9rZW4iOiJiN2M3MTc4Yi04OWRjLTQxMDctYjUzNC1hOGZiOTNhMzEwNzAiLCJuYW1lIjoiTGVuIiwiaWF0IjoxNTczMDI4MjU2fQ

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

1
2
FormatException: Invalid character (at character 37)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiIzYWNiNzBjZS0wYzYxLT...

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

1
2
FormatException: Invalid length, must be multiple of four (at character 183)
...jLTQxMDctYjUzNC1hOGZiOTNhMzEwNzAiLCJuYW1lIjoiTGVuIiwiaWF0IjoxNTczMDI4MjU2fQ

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


你可以先使用base64.normalize

例如:

1
2
3
4
5
6
7
8
9
10
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));
}

结果:

1
{"alg":"HS256","typ":"JWT"}

试试看。这将帮助你

1
2
3
4
5
6
Center(child:
Image.memory(
base64Decode(image6464.substring(23).replaceAll("\
",""))
 )
),