2017-11-16 10 views
0

Python 3에서 웹 서비스 호출을하려고합니다. 요청의 하위 집합에는 Python 사전 목록에서 오는 base64 인코딩 된 문자열이 포함됩니다.Python 웹 서비스 호출에서 Base64로 인코딩 된 데이터 통합 ​​

그래서 나는 목록을 덤프하고 문자열 인코딩 : 내 요청을 빌드 할 때

j = json.dumps(dataDictList, indent=4, default = myconverter) 
encodedData = base64.b64encode(j.encode('ASCII')) 

그럼, 내가 그 문자열에 추가합니다. 이 바이트에 돌아 오기 때문에 내가 문자열로 변경해야

... 
\"data\": \"''' + str(encodedData) + '''\" 
... 

내가 웹 서비스에서 얻고 응답 내 요청이 잘못된 것입니다. 나는 우리 STR (encodedData)를 인쇄 할 때 내가 얻을 다음뿐만 아니라 시작에

b'WwogICAgewogICAgICAgICJEQVlfREFURSI6ICIyMDEyLTAzLTMxIDAwOjAwOjAwIiwKICAgICAgICAiQ0FMTF9DVFJfSUQiOiA1LAogICAgICAgICJUT1RfRE9MTEFSX1NBTEVTIjogMTk5MS4wLAogICAgICAgICJUT1RfVU5JVF9TQUxFUyI6IDQ0LjAsCiAgICAgICAgIlRPVF9DT1NUIjogMTYxOC4xMDM3MDAwMDAwMDA2LAogICAgICAgICJHUk9TU19ET0xMQVJfU0FMRVMiOiAxOTkxLjAKICAgIH0KXQ == '내가 base64로 디코더에이를 복사하면 나는 B를 제거 할 때까지

, 내가 횡설수설을 얻을' 마지막 작은 따옴표. 나는 그것들이 나의 요청을 실패하게 만들고 있다고 생각한다. 이 메모에 따르면, 나는 b '가 무시된다고 생각할 것이다 : What does the 'b' character do in front of a string literal?

나는 어떤 조언을 주셔서 감사합니다.

감사합니다. strbytes 객체를 전달

답변

0

가 (당신이이 작업의 인코딩 알 필요가) 문자열로 바이트를 변환하지 않습니다, 그것은 표시 포맷됩니다 :

In [1]: x = b'hello' 

In [2]: str(x) 
Out[2]: "b'hello'" 

주를이 str(x)은 실제로 b'으로 시작하고 '으로 끝납니다. 당신이 문자열로 바이트를 디코딩 할 경우, bytes.decode를 사용

In [5]: x = base64.b64encode(b'hello') 

In [6]: x 
Out[6]: b'aGVsbG8=' 

In [7]: x.decode('ascii') 
Out[7]: 'aGVsbG8=' 

안전하게 ASCII로베이스 64 바이트를 디코딩 할 수있다. 또한 JSON은 ASCII가 아닌 UTF-8로 인코딩되어야합니다. 다음과 같이 변경해야합니다.

j = json.dumps(dataDictList, indent=4, default=myconverter) 
encodedData = base64.b64encode(j.encode('utf-8')).decode('ascii')