解码base64字符串返回Non

2024-10-03 02:41:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为用户确认邮件生成uid。你知道吗

'uid':urlsafe_base64_encode(force_bytes(user.pk)),

所以,它的工作很好,它返回类似“Tm9uZQ”的东西

然后,当我试图解码它时,使用force_text(urlsafe_base64_decode(uidb64)) 它不返回任何值。你知道吗

下一串

urlsafe_base64_decode(uidb64)

另外,返回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)))

结果还是没有:

Tm9uZQ==
None

我不明白默认解码怎么会不起作用。你知道吗


Tags: text用户noneuidstring邮件解码print
1条回答
网友
1楼 · 发布于 2024-10-03 02:41:30

"Tm9uZQ=="是字符串"None"base64编码

>>> from base64 import b64encode, b64decode
>>> s = b'None'
>>> 
>>> b64encode(s)
b'Tm9uZQ=='
>>> b64decode(b64encode(s))
b'None'
>>> 

你的一些数据可能丢失了。例如。用户.pk未设置。我认为force_bytes正在把一个Noneuser.pk从Django源变成bytestring b'None'

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'。你知道吗

相关问题 更多 >