2013-04-16 5 views
1

내가베이스 (64)에 텍스트를 해독하기 위해 노력하고있어, 나는 오류가 발생하는 이유 수행하는 동안 이해가 안 :Base64로 디코딩

b'Zm9v'.decode('base64_codec')

제기 예외는 다음과 같습니다 TypeError: expected bytes, not memoryview

추 신 : base64 모듈을 사용하는 대안이 있습니다. 그러나 나는 호기심에서 대답을 알고 싶어합니다.

감사합니다.

답변

4

불행히도 bytes.decode()str.encode() 메서드는 형식간에 변환하는 코덱 만 지원합니다. bytes.decode()이어야합니다. 항상str 개체를 반환하고 str.encode()bytes을 반환해야합니다. 참조 original issue that introduced these codecs :

코덱은 유니 코드의 도우미 방법과 객체는 파이썬 3.x에서의 유형 중 하나 개 조합을 지원 바이트 단지의 임의의 종류로 작업 할 수 있습니다

그래서 당신이 볼 특정 오류가 bytes.decode() 방법은 항상 유형 str의 값을 반환 할 것으로 예상한다는 사실에 기인한다. 마찬가지로, str.encode() 방법은 반환 값으로 bytes을 반환하지 않는 코덱에서 balks : 이와 같이

>>> 'Ceasar'.encode('rot_13') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: encoder did not return a bytes object (type=str) 

, 바이트 바이트-와 STR-에-STR 코덱, 당신은 직접 codecs 모듈을 사용할 필요가 :

import codecs 

codecs.getdecoder('base64_codec')(b'Zm9v')[0] 
+0

답변 해 주셔서 감사합니다. –

관련 문제