Programming/Python

[Python] Flask Response Encoding 문제

쌍쌍바나나 2017. 2. 7. 21:52
반응형

  파이썬에서 response를 보내는데, utf8이아닌, 유니코드 그대로 보내지고, 화면에 출력되는 문제가 발생했다. 정말 파이썬 하면서 encoding 문제는 진짜… 항상 마주할때마다 이렇게 해서 고쳐야지~라고 생각하고 고쳤을때 바로 안되면, 그냥 당황스럽기 짝이없음.


{

  "code": 100, 

  "data": {

    "\uc548\ub155": 2, 

    "\ud558\uc774\ub8e8": 2

  }, 

  "mesg": "success", 

  "method": "get", 

  "target": "/api/test", 

  "time": 0.001

}


아무래 utf8로 encoding을 해도 결과는 같음, postman에서 json으로 보면 아주 예쁘게 보여서  content-type을 appliction/json으로 보내면 되나 했더니 그것도 안되니, 이제 여기서부터 당황 스러움이 시작되었다.


아무튼 결론적으로 엄청나게 삽질을하고 삽질을 했다. 

문제는 내가 response를 할때 dict의 형태로 생성해서 보내는게 가장 문제

flask에서 지원하는 make_response를 사용하면 문제는 쉽게 해결을 할 수 있다.

함수 내부에서 header에 text/html; charset=utf-8를 설정해주기 때문에 문제 없이 utf8로 응답이 보내진다. 


이전에는 header없이 body만 전달했기 때문에 unicode그대로 화면에 출력을 했다. 

flask의 make_response를 사용하기 위해서는 아래와 같이 사용한다.



{"code": 100, "target": "/api/test", "mesg": "success", "time": 0.0018, "data": {"안녕": 2}, "method": "get"}



[참고] 

http://flask.pocoo.org/docs/0.12/api/#flask.Flask.response_class

http://flask.pocoo.org/docs/0.12/api/#flask.Response


반응형