2012-11-07 11 views
10

Próbuję napisać dwa programy, które konwertują ciąg na base64, a następnie inne, które pobierają kodowany kod base64 i konwertują go z powrotem na ciąg znaków.
tej pory nie mogę ominąć część kodowania base64 jak ciśgle błądKonwertowanie ciągu znaków na i z bazy 64

TypeError: expected bytes, not str 

mój kod wygląda tak daleko

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

Ponieważ Python-3 ma ciąg znaków Unicode, typ danych bajtów został wprowadzony. Konwertuj ciąg znaków na bajtrayray, np. używając 'b = bytes (mystring, 'utf-8')', a następnie używając 'b' do kodowania:' EncodedString = base64.b64encode (b) ', który zwróci bytearray –

Odpowiedz

25

ciąg jest już „dekodowane”, co STR klasa ma „dekodowania” function.Thus:

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

Jeśli chcesz dekodować tablicy bajtów i przekształcić go w ciąg połączenia:

the_thing.decode(encoding) 

Jeśli chcesz zakodować ciąg (przekształcić go w tablicy bajtów) zadzwonić:

the_string.encode(encoding) 

pod względem podstawy 64 rzeczy: Korzystanie „base64” jako wartość kodowania powyżej rentowności błąd:

LookupError: unknown encoding: base64 

Otwórz konsolę i wpisz następujące:

import base64 
help(base64) 

Zobaczysz, że base64 ma dwie bardzo przydatne funkcje, mianowicie kod b64 i kod b64. dekodowanie b64 zwraca tablicę bajtów, a b64encode wymaga tablicy bajtów.

Aby przekonwertować ciąg na jego reprezentację base64, należy najpierw przekonwertować go na bajty. Podoba mi się utf-8, ale używam tego kodowania, którego potrzebujesz ...

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

def base64ToString(b): 
    return base64.b64decode(b).decode('utf-8') 
Powiązane problemy