작성
·
224
1
안녕하세요? 열공중인 학생입니다.
검색기능 구현을 열심히 따라하고 있는데 보니 영문 검색은 작동하는데 한글 검색은 동작하지 않고
{'$or': [{'title': {'$regex': 'í\x8c\x8cì\x9d´ì\x8d¬'}}]}
가 프린트 됩니다.
주소창에는 http://localhost:9000/list?search=0&keyword=파이썬 로 잘 나오는 것 같은데 결과는 "데이터가 없습니다." 라고 나옵니다.
해결방법이 궁금합니다.
답변 2
3
일반적으로 많이 사용되는 크롬인 경우에는 대부분의 데이터를 유니코드로 처리하고 플라스크는 내부적으로 이를 자동으로 처리하게 되어있기 때문에 별 문제가 없을꺼라 사료됩니다만 웹브라우저를 어떤걸로 테스트 하셨는지 모르겠습니다.
어쨌든 한글을 보낼때 데이터의 인코딩 문제가 발생해서 생기는 문제입니다. 여러가지 처리 및 해결 방안이 있겠지만 검색시 보내는 한글 데이터를 javascript 의 escape() 함수로 감싸서 보내는 방법이 가장 간단할걸로 생각됩니다.
HTML 쪽 파일에서는 아래와 같이
self.location.href= "{{url_for('lists')}}?search=" + escape(v_search) + "&keyword=" + escape(v_keyword);
이런식으로 한글을 escape 처리해서 전송하고
받는 쪽 py 파일에서는 아래와 같이 다시 urllib.parse.unquote() 함수를 사용해서 디코딩 해야 합니다.
from urllib.parse import unquote
unquote() 함수로 해당 데이터를 디코딩 시키면 될 것 같습니다. 브라우저 및 환경이 어떤지 정확히 알 수 없어 이 답변으로 해결되실지 모르겠습니다.
0
헉! IE로 테스트하다가 발생한 것이었네요! Edge나 크롬, 웨일 브라우저에서는 잘 동작합니다!
IE는 유니코드를 잘 처리 못하는지는 처음 알았습니다. 선생님 감사합니다. 그리고 알려주신 내용도 잘 참고 하겠습니다!