问题描述
我正在处理一个颤振项目,目前我尝试使用 base64.decode() 方法解码的一些字符串出现错误。我创建了一个简短的 dart 代码,它可以重现我在使用特定字符串时遇到的问题:
import 'dart:convert';
void main() {
final message = 'RU5UUkVHQUdSQVRJU1==';
print(utf8.decode(base64.decode(message)));
}
我收到以下错误消息:
Uncaught Error: FormatException: Invalid encoding before padding (at character 19)
RU5UUkVHQUdSQVRJU1==
我试过用 JavaScript 解码相同的字符串,效果很好。如果有人能解释为什么我会收到此错误,并可能向我展示解决方案,我会很高兴。谢谢。
解决方法
Base64 编码将二进制数据分成 3 个完整字节的 6 位段,并将这些段表示为 ASCII 标准中的可打印字符。它基本上分两步完成。
第一步是将二进制字符串分解为 6 位块。 Base64 仅使用 6 位(对应于 2^6 = 64 个字符)来确保编码数据可打印和人类可读。没有使用 ASCII 中可用的任何特殊字符。
这 64 个字符(因此得名 Base64)是 10 个数字、26 个小写字符、26 个大写字符以及加号 (+) 和正斜杠 (/)。还有一个称为填充的第 65 个字符,它是等号 (=)。当二进制数据的最后一段不包含完整的 6 位时使用此字符
所以 RU5UUkVHQUdSQVRJU1== 不遵循编码模式。