SQS 메시지에서 오는 메시지로 작업하려고합니다.json의 gzip 바이트 압축 해제
내 동료 GZIP 자바를 이용하여 압축 한 필드가 JSON 객체를 전송한다. 그래서 기본적으로 gzip으로 압축 된 바이트 스트림입니다.
내가 그 현장의 모습 SQS에 직접 보려고
!"Message" : "\u001F�\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000mRmo�P\u0014�/M�h2�N�~1&�43?\u0019�X��R�\u001A(\u0004J�%&���\r��\u0000\u001Bn\u000B\u0010�\u0019\u0006\u0012�8d2�zo/��[.�F퇛��<�9�9缠Ԕeh1}�2��N�\u0014<.9�\u001C�;�pO�G���\u0002�yP��~�\u0013�t�_��姹:�B,-�=\u0004\r\u001A
CH의 \의 u0010 @ - Rz2c8Ĉ A> 오 \ t Kx; m = H \ u0006 ~ t \ " Ҽp6 , \ u0012q \ u001F % e % 2 c , -3w lzv 7 t -Uɰ \ u0010 9Q \ u0014 \ u00108] \ n \ u0005TU \ u0006 \ u001E R $ \ u0012 8 e Ե 4 %? \ u0007 \ u0007 \ \ \ 5 i \ u0017 RZ't . K o \ u0013 | \ u001F \ u0013 ]!! MRd F \ u001C + _ : \ u0017 \ u00132 b \ u0013 L U19 \ u0019 \ u0017 @ ~ : CA (\ u0015 \ u0019 RL &^{R D \ u0018nN \ u001F \ 스피 \ u0019M \ u0010 ~ Z; \ @ u001E B\u0002��Q�\u0004>�G�mwo�*���\u0002M�MZ�e��M�̪\u0010\u0014S���$�7V1��ߡL�W1�y��W&{��!\u001A\u001C6��\u0003�\u001DX����\u00105�\u0000{\u0002���J�\f�
의 sQ ovq \ u0003xP6dUz \ u000BJ \ u0017i \ u0003 \ u0000의 \ u0000의 "`
내 코드 :
for message in queue.receive_messages(AttributeNames=['All']):
message_dict = json.loads(message.body)
compressed = message_dict['Message']
ungziped_str = zlib.decompressobj().decompress(bytes(compressed.encode('utf-8')))
을 제공합니다 :
zlib.error: Error -3 while decompressing data: incorrect header check
그것의 내용을 읽을 수있는 방법을? 그런데
, 나는 https://stackoverflow.com/a/12572031/536474 여전히 같은 오류 메시지가 시도했습니다.
데이터를 Gzip으로 압축하고 UTF-8 쉽게 멀리로받을거야 일이 아니다 것처럼 그 결과 치료. gzip으로 압축 된 데이터는 base64로 인코딩되어야합니다. 그렇지 않으면 동료가 사실상 해독 할 수있는 개념 증명을 보여줄 필요가 있습니다. 즉, 어딘가에서 손실이있는 변환이 없다는 것을 증명할 수 있습니다. 모든 가능한 바이트가 UTF-8의 모든 가능한 위치에서 유효하지는 않지만, base64 base64 알파벳의 모든 기호는 유효한 1 바이트 UTF-8 문자입니다. 훨씬 더 나은 해결책입니다. –
사실 ' '은 주사위를받는 위치, 동료의 측면 또는 SQS에 따라 거대한 적기입니다. gzip 스트림의 처음 2 옥텟은 항상 '0x1f'' 0x8b'입니다. 우리는'\ u001F'를 보았지만' '을 가지고 있습니다. 그 이유는 UTF-8에서 이전의 8 진수 <='0x7f' 일 때'0x8b'는 실제로 유효하지 않은 옥텟입니다. 그것은 합법적으로 오직> ='0x80' 인 또 다른 옥텟으로 선행 될 수 있습니다. 규칙은 조금 복잡하지만 특별히 중요하지 않습니다. 요점은 블롭을 아무런 문제없이 문자로 처리 할 수 없다는 것입니다. –