Dart - Base64字符串不等于python

raf*_*b21 5 python dart

当我使用Python生成base64将在其中使用的字符串时raw key { 'raw': value } GMAIL API,发送电子邮件就完美了.

但是当我使用Dart生成相同的base64字符串时,字符串与python不同,因此我无法发送电子邮件,因为GMAIL API告诉我message: Invalid value for ByteString

将转换为base64的字符串是:

var message = '''<html><meta http-equiv="content-type" content="text/html; charset=utf-8"/><head></head><body>Test</body></html>'''
Run Code Online (Sandbox Code Playgroud)

Python代码:

import base64

e = base64.urlsafe_b64encode('''<html><meta http-equiv="content-type" content="text/html; charset=utf-8"/><head></head><body>Test</body></html>''')
print(e)
Run Code Online (Sandbox Code Playgroud)

结果:

PGh0bWw-PG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz48aGVhZD48L2hlYWQ-PGJvZHk-VGVzdDwvYm9keT48L2h0bWw-

飞镖码:

import 'dart:convert';
var _bytes = utf8.encode('''<html><meta http-equiv="content-type" content="text/html; charset=utf-8"/><head></head><body>Test</body></html>''');
var _base64 = base64Encode(_bytes);
print(_base64);
Run Code Online (Sandbox Code Playgroud)

结果:

PGh0bWw+PG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz48aGVhZD48L2hlYWQ+PGJvZHk+VGVzdDwvYm9keT48L2h0bWw+

请注意,唯一的区别是+Dart的base64字符串中的-符号,以及Python的base64字符串中的符号

如何生成相同的base64 python代码,以便我可以在GMAIL API中发送电子邮件

Ser*_*sta 5

明确要求Python在base64编码的字符串中用 - 替换所有+字符,因为您已经使用了该urlsafe_b64encode变体!文件说:

base64.urlsafe_b64encode(S)

使用URL和文件系统安全字母表对类似字节的对象进行编码,该字母表替换 - 而不是标准Base64字母表中的+和_而不是/,并返回编码的字节.结果仍然可以包含=.

如果你想要与Dart产生相同的字符串,只需使用encodebytesPython3或encodePython 2.


Ric*_*eap 4

Dart 有一个 URL 安全版本的 Base 64 编码,就像 Python 一样。

改变

var _base64 = base64Encode(_bytes);

var _base64 = base64UrlEncode(_bytes);