解码 base64 字符串 return None
Decoding base64 string return None
我尝试为用户确认电子邮件生成 uid。
'uid':urlsafe_base64_encode(force_bytes(user.pk)),
所以,效果不错,return有点像 "Tm9uZQ"
然后,当我尝试解码它时,使用 force_text(urlsafe_base64_decode(uidb64))
它 return None.
下一个字符串
urlsafe_base64_decode(uidb64)
另外,return b'None'
我尝试 google 它,并看到了不同的实现,但复制粘贴代码不起作用。
我写的像
b64_string = uidb64
b64_string += "=" * ((4 - len(b64_string) % 4) % 4)
print(b64_string)
print(force_text(base64.urlsafe_b64decode(b64_string)))
结果仍然是None:
Tm9uZQ==
None
我不明白为什么默认解码不起作用。
"Tm9uZQ=="
是字符串"None"
,
的base64
编码
>>> from base64 import b64encode, b64decode
>>> s = b'None'
>>>
>>> b64encode(s)
b'Tm9uZQ=='
>>> b64decode(b64encode(s))
b'None'
>>>
您的某些数据可能丢失了。例如。 user.pk 未设置。我认为 force_bytes
正在将 None
user.pk
转换为字节串 b'None'
,来自 Django 源,
def force_bytes(s, encoding='utf-8', strings_only=False, errors='strict'):
"""
Similar to smart_bytes, except that lazy instances are resolved to
strings, rather than kept as lazy objects.
If strings_only is True, don't convert (some) non-string-like objects.
"""
# Handle the common case first for performance reasons.
if isinstance(s, bytes):
if encoding == 'utf-8':
return s
else:
return s.decode('utf-8', errors).encode(encoding, errors)
if strings_only and is_protected_type(s):
return s
if isinstance(s, memoryview):
return bytes(s)
return str(s).encode(encoding, errors)
您可以通过在调用 force_bytes
.
时设置 strings_only=True
来防止 None
变成 b'None'
我尝试为用户确认电子邮件生成 uid。
'uid':urlsafe_base64_encode(force_bytes(user.pk)),
所以,效果不错,return有点像 "Tm9uZQ"
然后,当我尝试解码它时,使用 force_text(urlsafe_base64_decode(uidb64))
它 return None.
下一个字符串
urlsafe_base64_decode(uidb64)
另外,return b'None'
我尝试 google 它,并看到了不同的实现,但复制粘贴代码不起作用。
我写的像
b64_string = uidb64
b64_string += "=" * ((4 - len(b64_string) % 4) % 4)
print(b64_string)
print(force_text(base64.urlsafe_b64decode(b64_string)))
结果仍然是None:
Tm9uZQ==
None
我不明白为什么默认解码不起作用。
"Tm9uZQ=="
是字符串"None"
,
base64
编码
>>> from base64 import b64encode, b64decode
>>> s = b'None'
>>>
>>> b64encode(s)
b'Tm9uZQ=='
>>> b64decode(b64encode(s))
b'None'
>>>
您的某些数据可能丢失了。例如。 user.pk 未设置。我认为 force_bytes
正在将 None
user.pk
转换为字节串 b'None'
,来自 Django 源,
def force_bytes(s, encoding='utf-8', strings_only=False, errors='strict'):
"""
Similar to smart_bytes, except that lazy instances are resolved to
strings, rather than kept as lazy objects.
If strings_only is True, don't convert (some) non-string-like objects.
"""
# Handle the common case first for performance reasons.
if isinstance(s, bytes):
if encoding == 'utf-8':
return s
else:
return s.decode('utf-8', errors).encode(encoding, errors)
if strings_only and is_protected_type(s):
return s
if isinstance(s, memoryview):
return bytes(s)
return str(s).encode(encoding, errors)
您可以通过在调用 force_bytes
.
strings_only=True
来防止 None
变成 b'None'