아래의 코드는 트위터 스트림을 수집할 때 유니코드로 변환된 문자열을 한글로 변환시켜주는 예제이다. 사용된 파이썬의 버전은 3.5 이고 tweepy 라이브러리를 사용하였다.
# -*- coding: utf8 -*-
import tweepy
consumer_key='your-consumer-key'
consumer_secret='your-consumer-secret'
access_token='your-access-token'
access_token_secret='your-access-token-secret'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
class listener(tweepy.streaming.StreamListener):
def on_data(self, data):
try:
data = data.encode('utf-8')
data = data.decode('unicode_escape')
except:
print('Err')
print(data)
return True
def on_error(self, status):
print('error : ', status)
twitterStream = tweepy.Stream(auth, listener())
twitterStream.filter(track='파이썬')
listener
의 on_data
함수에서 data
변수가 트위터 api로 부터 받은 트위터 검색 결과이다.
여기서 기본적으로 한글 문자열이 \ud788\ubcf4\uae30
와 같이 유니코드 문자열로 출력되는 문제가 있다.
data = type(data) # <class 'str'>
print(data) # ~ \ud788\ubcf4\uae30 ~
data = data.encode('utf-8')
data = type(data) # <class 'bytes'>
print(data) # b'~\\ud788\\ubcf4\\uae30~'
data 변수의 type을 출력해보면 str 타입이라고 출력되고 값을 출력해보면 \ud788\ubcf4\uae30
와 같은 형태로 출력된다.
data
변수를 encode
함수를 사용하여 bytes
형식으로 변환하면 출력되는 결과가 b'\\ud788\\ubcf4\\uae30'
와 같은 형태로 출력되는 것을 확인 할 수 있다.
한글 문자열의 경우 byte로 변환하면, b'\ud788\ubcf4\uae30'
이처럼 출력되는데 tweepy 라이브러리를 사용하여 수집할 때 한글 문자열이 유니코드로 변환된후 이 값이 디코딩되지 않은 상태로 string으로 변환되어 출력되기 때문에 위와 같이 출력된다.
data = data.encode('utf-8')
data = data.decode('unicode_escape')
유니코드 문자열을 한글로 변환하기 위해서는 먼저 데이터를 encode 함수를 통해 bytes 형으로 변환하고, decode 함수를 사용하여 ‘unicode_escape’ 처리를 해주면 한글이 제대로 출력된다.