首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python3.x和django-1.9上使用base64编码的整型字符串

在Python3.x和django-1.9上使用base64编码的整型字符串
EN

Stack Overflow用户
提问于 2015-12-05 15:44:58
回答 1查看 2.1K关注 0票数 0

我使用Python3.4和django-1.9。ı需要使用base64对字符串和编码进行整型转换。

代码:

代码语言:javascript
复制
new_key = base64.b64encode(str(key))

错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/home/mehmet/Envs/ets-3/lib/python3.4/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/mehmet/Envs/ets-3/lib/python3.4/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/mehmet/Envs/ets-3/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/mehmet/Envs/ets-3/lib/python3.4/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/mehmet/PycharmProjects/Tango/orders/views.py", line 167, in order_info
    subscribe_item_list, mount_subscribe_discount_relation)
  File "/usr/lib/python3.4/contextlib.py", line 30, in inner
    return func(*args, **kwds)
  File "/home/mehmet/PycharmProjects/Tango/operations/order.py", line 94, in new_order
    return encryption(order.id)
  File "/home/mehmet/PycharmProjects/Tango/operations/order.py", line 15, in encryption
    new_key = base64.b64encode(str(key))
  File "/home/mehmet/Envs/ets-3/lib/python3.4/base64.py", line 62, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
TypeError: 'str' does not support the buffer interface
EN

回答 1

Stack Overflow用户

发布于 2015-12-05 17:14:56

在Python3中,base64.b64encode需要一个bytes对象作为它的参数,而不是像现在这样需要一个str。您可以通过将key中的整数转换为字节字符串,然后对字节字符串进行base64编码来处理此问题:

代码语言:javascript
复制
>>> key = 123456789
>>> new_key = base64.b64encode(bytes(str(key), encoding='ascii'))
>>> print(new_key)
b'MTIzNDU2Nzg5'
>>> key = -443322
>>> new_key = base64.b64encode(bytes(str(key), encoding='ascii'))
>>> print(new_key)
b'LTQ0MzMyMg=='

这里,整数key首先转换为Python3字符串(类型为str),然后使用ASCII编码转换为字节字符串(类型为bytes)。可以使用任何有效的编码,但ASCII码肯定会覆盖所有可能的数字和一元-

为了完整起见,在Python 2中,您可以这样做:

代码语言:javascript
复制
>>> key = 123456789
>>> new_key = str(key).encode('base64')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34102571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档