2012-11-07 31 views
10

Tôi đang cố gắng viết hai chương trình chuyển đổi chuỗi thành base64 và một chuỗi khác có chuỗi mã hóa base64 và chuyển đổi nó thành chuỗi.
cho đến nay tôi không thể vượt qua phần mã hóa base64 như tôi tiếp tục nhận được lỗiChuyển đổi một chuỗi đến và đi từ Base 64

TypeError: expected bytes, not str 

mã của tôi trông như thế này cho đến nay

def convertToBase64(stringToBeEncoded): 
import base64 
EncodedString= base64.b64encode(stringToBeEncoded) 
return(EncodedString) 
+5

Vì python-3 có chuỗi unicode, kiểu dữ liệu byte được giới thiệu. Bạn phải chuyển đổi chuỗi của mình thành mã vạch, ví dụ: bằng cách sử dụng 'b = bytes (mystring, 'utf-8')', và sau đó sử dụng 'b' cho mã hóa:' EncodedString = base64.b64encode (b) ', sẽ trả về một dấu thăng –

Trả lời

25

Một chuỗi đã được 'giải mã', do đó str lớp không có 'giải mã' function.Thus:

AttributeError: type object 'str' has no attribute 'decode' 

Nếu bạn muốn giải mã một mảng byte và biến nó thành một cuộc gọi chuỗi:

the_thing.decode(encoding) 

Nếu bạn muốn mã hóa một chuỗi (biến nó thành một mảng byte) gọi:

the_string.encode(encoding) 

Xét về mặt cơ sở 64 thứ: Sử dụng 'base64' làm giá trị cho mã hóa trên lãi suất lỗi:

LookupError: unknown encoding: base64 

mở một giao diện điều khiển và gõ như sau:

import base64 
help(base64) 

Bạn sẽ thấy rằng base64 có hai hàm rất tiện dụng, cụ thể là b64decode và b64encode. giải mã b64 trả về mảng byte và b64encode yêu cầu mảng byte.

Để chuyển đổi chuỗi thành đại diện base64, trước tiên bạn cần phải chuyển đổi chuỗi thành byte. Tôi thích utf-8 nhưng sử dụng bất kỳ mã hóa nào bạn cần ...

import base64 
def stringToBase64(s): 
    return base64.b64encode(s.encode('utf-8')) 

def base64ToString(b): 
    return base64.b64decode(b).decode('utf-8') 
Các vấn đề liên quan