解码 Base 64 图像以使用 Image 显示时出现无效字符(字符 77)。记忆()

问题描述 投票:0回答:3

所以我尝试使用以下代码在 flutter 中使用 base64 字符串显示图像:

class GeneratedImages extends StatelessWidget {
      const GeneratedImages({
        Key? key,
       required this.imageBytes,
   }) : super(key: key);
     final String imageBytes;

    @override
          Widget build(BuildContext context) {
return Image.memory(
   const Base64Decoder().convert(imageBytes),
  errorBuilder: (_, object, stackTrace) {
    return const Center(
      child: Icon(Icons.image_not_supported),
    );
  },
);
}
}

当我运行代码时,显示以下错误

 FormatException: Invalid character (at character 77)

我拥有的 Base 64 字符串是: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEP ERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4e Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wARCAEAAQA FK5uYR9j05ISHI/eMTjPTGCPbtWJqHi3xJcyBhew27548oKMDPAG7k9cV1UsJWTu3YyqYml6n//Z

完整的base64字符串已上传到此链接(免费查看和编辑)

任何帮助将不胜感激

flutter dart encoding base64
3个回答
7
投票

基于 @Jamesdlin 的评论中建议的答案。

删除字符串中存在的所有空格即可解决问题。

能够通过使用这个来删除空格:

 base64.decode(imageBytes.replaceAll(RegExp(r'\s+'), '')),

4
投票

如果您的 Base64 字符串在逗号后面包含由 RFC-2397 定义的数据。 Dart 的 Uri 类基于 RFC-3986,所以你不能使用它。

用逗号分割字符串并取最后一部分:

String imgbase64 = 'data:image/gif;base64,...';
Uint8List _bytes = base64.decode(imgbase64.split(',').last);

参考:https://stackoverflow.com/a/59015116/12382178


0
投票

如果错误是:FormatException(FormatException:无效字符(位于字符 17)),该怎么办 821PlayerUnknown@# 解码加密字符串时的 @ 字符

导致错误的方法是:final Uint8List cryptoBytes = base64.(这里发生错误)decode(item.password.replaceAll(RegExp(r'\s+'), '')).sublist( 0, base64.decode(item.password).length, );

© www.soinside.com 2019 - 2024. All rights reserved.