Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[질문] 한글파일의 BodyText/Section0의 내용을 zlib 압축해제하여 읽기 위해선 어떻게 해야 할까요? #171

Open
jaepil-choi opened this issue Feb 24, 2020 · 0 comments

Comments

@jaepil-choi
Copy link

jaepil-choi commented Feb 24, 2020

개발자님 안녕하세요, 버그 이슈는 아니고 hwp5txt의 동작방식에 질문이 생겨 여쭙습니다. 소스코드를 다운받아 열심히 살펴보았으나 도저히 이 이상은 알아낼 수가 없네요 ㅠㅠ

저는 스크립트를 짜면서 hwp 파일의 다른 내용은 필요없고 오직 BodyText/Section0의 내용만을 추출하고 싶었습니다. pyhwp는 prompt에서의 명령만을 지원하는 것 같아 한글과컴퓨터의 한글파일 형식 공개 문서와 인터넷 검색, 그리고 pyhwp 소스코드를 참고하여 방법을 찾아내고 싶었는데요,

대략 핵심은 FileHeader에서 압축여부 등의 정보를 확인하고 BodyText/Section0의 내용을 추출하여 zlib으로 압축을 해제하고 UTF-16le 로 디코딩 하면 된다는 말이었던 것 같습니다.

하지만 제가 직접 시도했을 땐

import zlib, olefile
ole = olefile.OleFileIO('./hwp_text_dir/2020-01-17_-_금융통화위원회 의사록(2020년도 제1차).hwp')
body_text = zlib.decompress(ole.openstream('BodyText/Section0').getvalue(), -15)
body_text.decode('utf-16')

UnicodeDecodeErrorTraceback (most recent call last)
in
----> 1 body_text.decode('utf-16')

UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 200-201: illegal encoding

이렇게 zlib으로 어떻게 decompress를 해도 (제대로 한 것인지도 모르겠습니다.) utf-16le로 디코딩이 되지 않더라고요...

이를 위해 bitstring에 대해서도 처음 공부하고 hwp5txt의 소스코드를 최대한 참고해보려 했으나 너무 고급문법이라 아무리 봐도 동작 원리가 잘 이해가 되지 않았습니다.

hwp5txt는 어떻게 hwp를 zlib 압축해제하고 제대로 된 한글 문자열로 디코딩하는건가요? 간단히라도 설명해주시면 정말 감사하겠습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant