toujours

UnicodeDecodeError: 'utf-8' gethostname socket에서 오류날때 호스트네임 변경 없이 해결 방법 본문

카테고리 없음

UnicodeDecodeError: 'utf-8' gethostname socket에서 오류날때 호스트네임 변경 없이 해결 방법

toujours_ 2024. 7. 2. 10:19

윈도우 PC에서 간단하게 파이썬으로 웹서버를 Flask, Django, http.server 등으로 띄우려고했는데 아무리 내 호스트서버 IP 바인딩 정보를 바꿔봐도 계속해서
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte
가 떴다.
 
조금 찾아보니 socket내부에서 socket.gethostname()함수를 사용하여 내 PC의 호스트이름을 받아오는데, 이게 자꾸 한글이라 오류가 나는것이었다.
(김 -> b1e8 이라서 0xb1 (position 0) 잡힌 걸린거였네)
키릴문자 쓰는 많은 러시아인들이 고통을 겪고있었는데... 다들 타협하여 호스트이름을 영어로 바꿔서 문제를 해결하고있었다(슬라브족들 이래도 돼?).
첨엔 나도 호스트이름을 바꿀까도 싶었지만, PC사용 정책상 맘대로 바꿀수도 없는 상황이었다.
가져다 쓰는 라이브러리의 내부구현을 바꾸는것에 어려움을 겪고 있던차에 아래와 같은 방법으로간단히 해결하였다.
 
 
해결방법 : mocking으로 간단히 해결
 
 
from unittest.mock import patch 하고
해당 오류나는 함수를 with문으로 감싸자.
 
ex)
with patch('socket.gethostname', return_value='hostname_sample'):
    server_addr = ('', 8088)
    httpd = HTTPServer(server_addr, my_handler)
    httpd.server_forever()
 

잘된다!!!!!!!!!!!
 
(애초에  호스트네임이 상관없는 구현이었다면 문제없다.)

 
반응형
Comments