[Python] 파이썬2.x Unicode와 UTF-8 인코딩 감잡기

2015. 11. 30. 12:25·IT기술 관련/파이썬_루비 등 언어
반응형

출처: http://jonnung.blogspot.kr/2014/07/python2-unicode-utf8.html

 

 파이썬2.x의 기본 인코딩은 ascii 이다. 파이썬 스크립트에서 한글을 사용하게 될 때 파이썬은 ascii 인코딩일 것으로 예상하고 해석하려고 하지만 한글을 ascii로 해석이 불가능 하기 때문에 SyntaxError가 발생 한다.

 이 문제를 해결하기 위해 파이썬 파일의 최상단에는 아래와 같은 주석을 추가하면 조금 도움이 된다.

?
1
#-*- coding: utf-8 -*-


 이 주석이 있으면 해당 파이썬 스크립트는 utf-8로 인코딩 되어 있다는 것을 미리 알려주는 역할을 한다.

 여기서 잠깐 유니코드(unicode)와 utf-8에 대한 설명을 간단하게 하자면 utf-8은 유니코드를 위한 문자 인코딩 방식 중에 하나이다. utf-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지 사용한다고 한다.

 다시 파이썬의 인코딩에 대한 부분으로 돌아가서 간단한 예제를 하나 보도록 하자.

?
1
2
3
4
# -*- coding: utf8 -*-
 
print(type('한글').__name__)  # str
print(type(u'한글').__name__)  # unicode
?
1
2
3
4
print(type('한글').__name__)
print(type(u'한글').__name__)
 
SyntaxError: Non-ASCII character '\xed' in file…블라블라~


 위 예제 코드의 결과를 보면 쉽게 감을 잡을 수 있다.

 첫번째 에제코드에서 상단에 내부 문자에 대한 인코딩을 utf-8로 하겠다는 미리 알려줬기 때문에(누구에게?? print에게!!) ‘한글’이라는 문자열의 타입은 확인해보면 string 이다. 그리고 u’한글’으로 하게 되면 유니코드로 잘 변환해서 출력 시켜주는 것을 알 수 있다.

 두번째 예제에서는 상단에 선언한 부분을 제거하고 스크립트를 실행 시켜봤는데 역시나 문법에러(SyntaxError)가 발생 하는 것을 확인 할 수 있었다. ‘한글’을 기본적으로 ascii로 해석하려 하기 때문에 type을 알 수도 없고, 유니코드로 변환도 할 수 없는 것이다.

?
1
2
3
4
# -*- coding: utf8 -*-
 
print str(unicode('한글'))
print str(unicode(‘한글', ‘utf-8'))


 ‘한글’을 유니코드로 변환하고, 그 유니코드를 다시 문자열로 바꿔서 출력하려고 한다.
이 코드는 결과는 무엇일까?
unicode() 기본적으로 전달된 인자값을 ascii로 해석하려고 하기 때문에 위 예제는 아래와 같은 에러가 발생한다.

?
1
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 0: ordinal not in range(128)


 결국 상단에 utf-8을 사용할 것이라고 선언했어도 unicode() 함수를 사용할때는 소용없다는 것을 알게 되었다.

이 코드를 정상적으로 동작하도록 해보자.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf8 -*-
 
# 유니코드로 다루기 예제1
hoo = unicode('한글', 'utf-8')
print str(hoo.encode('utf-8'))
 
# 유니코드로 다루기 예제2
bar = '한글'.decode('utf-8')
print bar.encode('utf-8')
 
# 유니코드로 다루기 예제3
foo = u'한글'
print str(foo.encode('utf-8'))


정신 건강을 위해서라도 파이썬 스크립트 내부에서 사용하는 모든 문자열은 유니코드로 다루는 것이 좋겠다.
그리고 파일이나 DB에 저장하거나 네트워크로 전송하기 직전에는 string으로 변환해서 넘겨주는 방식으로 개발하는 것이 좋다…

아! 그리고  ‘유니코드가 아닌 상태로 CJK(Chinese. Japanese, Korean) 비교할 때 주의할 점’(https://gist.github.com/kimdwkimdw/a2ea13848167984adc8f)도 참고하고 숙지해서 개발시에 엉뚱한 삽질은 안하도록 하자!


참고 자료

  • http://ko.wikipedia.org/wiki/UTF-8
  • http://libsora.so/posts/python-hangul/
  • http://seorenn.blogspot.kr/2011/02/python-unicodeutf-8.html
  • http://www.slideshare.net/LeeSeongjoo/2-17395073
  • http://amornatura.tistory.com/104
  • http://www.lug.or.kr/m/bbs/view.php?bo_table=python&wr_id=68&page=1
반응형
저작자표시 (새창열림)

'IT기술 관련 > 파이썬_루비 등 언어' 카테고리의 다른 글

[Python] 파이썬 악성코드  (0) 2015.12.09
[Python] Python (*.py)를 exe화 하기  (0) 2015.12.09
[Python] [python]os.path.exists() 파일 존재 체크하기  (0) 2015.11.30
[Python] 반복문 맨 마지막 배열 뽑아내기  (1) 2015.11.30
[Python] MySQL 쿼리 값은 정상인데 DB에 데이터 안들어가는 경우  (0) 2015.11.30
'IT기술 관련/파이썬_루비 등 언어' 카테고리의 다른 글
  • [Python] 파이썬 악성코드
  • [Python] Python (*.py)를 exe화 하기
  • [Python] [python]os.path.exists() 파일 존재 체크하기
  • [Python] 반복문 맨 마지막 배열 뽑아내기
호레
호레
창업 / IT / 육아 / 일상 / 여행
    반응형
  • 호레
    Unique Life
    호레
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 법률
        • 기본
        • 개인정보보호법
        • 정보통신망법
        • 전자금융거래법
        • 전자금융감독규정
        • 신용정보법
        • 온라인투자연계금융업법
      • 창업
        • 외식업 관련
        • 임대업 관련
        • 유통업 관련
        • 세무 관련
        • 마케팅 관련
        • 기타 지식
        • 트렌드
        • Youtube
      • IT기술 관련
        • 모바일
        • 윈도우
        • 리눅스
        • MAC OS
        • 네트워크
        • 빅데이터 관련
        • A.I 인공지능
        • 파이썬_루비 등 언어
        • 쿠버네티스
        • 기타 기술
      • 퍼블릭 클라우드 관련
        • Azure
        • GCP
        • AWS
      • 정보보안 관련
        • QRadar
        • Splunk
        • System
        • Web
      • 기타
        • 세상 모든 정보
        • 서적
      • 게임 관련
        • 유니티
      • 부동산
      • 맛집 찾기
        • 강남역
        • 양재역
        • 판교역
        • ★★★★★
        • ★★★★
        • ★★★
        • ★★
        • ★
      • 결혼_육아 생활
        • 리얼후기
        • 일상
        • 육아
        • 사랑
        • Food
      • 영어
        • 스피킹
        • 문법
        • 팝송
        • 영화
      • K-컨텐츠
        • 드라마
        • 영화
        • 예능
      • 독서
      • 프로젝트 관련 조사
        • 시스템 구축
        • 로그 관련
        • 웹
        • APT
        • 모의 해킹
        • DB
        • 허니팟
        • 수리카타
        • 알고리즘
        • FDS
      • 기업별 구내 식당 평가
        • 한국관광공사
        • KT telecop
        • KT M&S
        • KT powertel
        • KT cs 연수원
        • 진에어
      • 대학 생활
        • 위드윈연구소
        • 진로 고민
        • 채용정보
        • 자동차
        • 주식
        • 악성코드
        • 게임 보안
      • 쉐어하우스
  • 블로그 메뉴

    • 홈
    • 게임 관련
    • IT 기술 관련
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    쥬쥬랜드
    맛집
    상호관세
    돈까스
    보안가이드
    판교맛집
    무역전쟁
    런치
    판교역
    마케팅
    수제버거
    유니티
    수제버거존맛
    점심
    복리후생
    대통령
    수제버거맛집
    이재곧죽습니다
    판교
    AWS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
호레
[Python] 파이썬2.x Unicode와 UTF-8 인코딩 감잡기
상단으로

티스토리툴바