2019년 4월 4일 목요일

#Django UnicodeDecodeError (Django version 2.2 Error) + 2.2.1 vesrion 에서 fix되었습니다.


Django 2.2version이 release된 후 공부를 하던중

unicodeDecodeError를 겪었다.


일단 증상으로는


이렇게 Error가 발생하게 되면



unicodeDecodeError: 'cp949' codec can't decode byte 에러가 발생하게 되고

해당 에러가 계속 발생하여


Error를 띄워주던 Template이 이처럼 A server error occurred만 출력 된다


그래서 Error log를 추적하고
Django 2.1.8 버전과도 비교 해보니 technical_500.html file내의 239번째 line의
<span>...</span> 이 <span>…</span>로 바뀌어 있음을 확인했다


Django 2.1.8 까지는 <span> 태그 내부가 ... (dot dot dot) 으로 이루어져 있었는데

Django 2.2 부터는 <span>태그 내부가 …(ellipsis, 말줄임표) 으로 이루어져 있어

해당 태그를 읽을 때 unicode Error가 발생하였다.



그래서 <span>태그 내부를 …(ellipsis, 말줄임표) 가 아닌 ... (dot dot dot) 으로 바꿔주거나


위의 image에서와 같이 debug.py파일 331번째 line에 있는 technical_500.html을 encoding="utf-8"로 open해주면

정상적으로 Template이 출력된다





+ 혹시 설명이 부족하신 분들을 위해 상세하게 내용 추가

 
요런 unicodeDecodeError가 뜨는 경우를 보셨을껍니다.
그리고 우리의 template은
 
이런 슬픈 화면을 보여주게 됩니다

그래서 열심히 구글링을 해봤지만 마음에 드는 답변이 없어서
Error log를 열심히 보니.
Django 2.2 version부터 
가상환경\Lib\site-packages\django\views\templates 에 있는 technical_500.html의  239번째 line의 <span> 태그로 감싸진 부분이 말줄임표로 바뀌었음을 알수 있었습니다
Django 2.1.8 vesrion까지는 온점 세개였습니다ㅠㅠㅠ

그래서 해당 말줄임표를 지우고 온점 세개 ... 를 입력해주시면 unicode Error가 발생하지 않고 Error 템플릿이 뜨는 것을 확인하실 수 있습니다.


해결방법 2
가상환경\Lib\site-packages\django\views 에 있는 debug.py의 331번째 line에서 technical_500.html을 열때 open(encoding="utf-8")로 수정해주시면 technical_500.html을 수정 안해주셔도 해결됩니다.


-끝 - 

따라서 pip install django==2.1.8 로 설치를 강제해주시면 해당 unicode Error는 뜨지 않습니다

(5월 4일 기준 수정된 최신버전 2.2.1이 릴리즈되어서 그냥 pip install django해주셔도 무방합니다)



수정된 github 사항

가장 많이 본 글