일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- remarkable
- vanilla.js
- random chord
- CSS #그라데이션 #선형 #이미지위에
- 리마커블
- 한글
- 펜윅트리
- 크러쉬 - 춤
- 2934
- PQ92
- gethostname
- LRH식물
- 한글폰트
- 바이낸스
- 어퍼스트럭쳐
- 한국어
- BI트리
- 퓨어Q9
- 웹
- 앱코
- 랜덤코드
- 리마커블2
- pulltoreload
- random-chords
- LRH 식물
- 무접점키보드
- 래퍼럴
- 크러시
- PQ92-3BWF
- 당겨서새로고침
- Today
- Total
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()
잘된다!!!!!!!!!!!
(애초에 호스트네임이 상관없는 구현이었다면 문제없다.)