인프런 커뮤니티 질문&답변

vocolor님의 프로필 이미지

작성한 질문수

남박사의 파이썬으로 실전 웹사이트 만들기

게시판만들기 - 글 리스트

검색어 한글입력

작성

·

219

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

vocolor님의 프로필 이미지
vocolor
질문자

헉! IE로 테스트하다가 발생한 것이었네요! Edge나 크롬, 웨일 브라우저에서는 잘 동작합니다!

IE는 유니코드를 잘 처리 못하는지는 처음 알았습니다. 선생님 감사합니다. 그리고 알려주신 내용도 잘 참고 하겠습니다!

vocolor님의 프로필 이미지

작성한 질문수

질문하기