리퀘스트 모듈로 가져온 response 개체에서 유니코드를 한글로 변환하고 싶습니다.

조회수 2170회
import requests

url = '임의의_주소'
data_payload = {'1', '1'}

res = requests.post(url, data=data_payload)
txt = res.text
print(res.text)

이런 소스코드가 있으면 res는utf-8로 인코딩된 'requests.models.Response' 개체입니다. 그리고 테스트로 res.text를 출력하면 영어는 잘 나오는데 한글이 유니코드로 나옵니다. 예를 들면 '정'자가 \uC815 이렇게 출력되는데요.

이런 경우에 유니코드를 한글로 변환해서 출력하려면 어떻게 해야 하나요?

print(res.text.encode(encoding='utf-8').decode(encoding='utf-8')

인터넷에서 찾아보고 이런식으로 해봤는데 여전히 유니코드 \uC815 이렇게 출력되더라고요. 제 생각에는 res.text가 되기전에 유니코드 인코딩을 해야 될거같은데 잘 모르겠습니다.

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    requests 의 response 객체의 text 는 이미 인코딩을 적용해서 디코드한 파이썬 유니코드 객체일 겁니다. (즉, 추가적으로 인코딩이나 디코딩을 적용해 줄 필요가 없음.)

    한글 "정"이 "\uC815"로 표현된 것은 print 함수가 복잡하게 nested 되어 들어 있는 한글을 잘 표현해 주지 못하기 때문에 저렇게 보일 뿐일 가능성이 큽니다. ( 0xc815 == ord('정') 입니다.)

    ( https://blog.emacsos.com/unicode-in-python.html )

    그래서, 파이썬에서 print 문으로 한글 문자열의 인코딩을 확인해 보는 것은 매우 불완전하고 위험합니다.


    추가 : 제 답변이 논리가 안 맞네요. 질문자의 해결방법을 보니, response 텍스트 자체가 아스키로만 이루어지도록, 다국어문자(한글을 포함한)는 이스케이프 된 형태였던 것이 아닐까 싶습니다.

  • 이것저것 해보다가 일단 해결하였습니다.

    print(json.loads(res.text))
    

    일케 하니까 한글로 정상출력되네요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)