본문 바로가기
프로그래밍/Python

[Python] 인코딩 확인하기 - chardet

by 부자 꽁냥이 2021. 8. 4.

안녕하세요~ 꽁냥이에요. 종종 주어진 문자열의 인코딩을 알아야 할 필요가 있지요. 특히 텍스트 파일을 불러올 때 적절한 인코딩 형식을 지정해야 할 때처럼 말이죠. 파이썬에서 chardet이라는 모듈이 해당 문자열의 인코딩 형식을 알려주는 고마운 친구인데요. 이번 포스팅에서는 chardet의 기본적인 사용법에 대해서 알아보려고 합니다.

 

1. chardet 모듈이란?

2. 사용법


   1. chardet 모듈이란?

chardet 모듈은 특정 문자열을 분석하여 인코딩 형식을 예측해주는(탐지하는) 모듈입니다. chardet는 아마도 character + detect을 합친 단어인 것 같아요.

 

chardet 문서에 따르면 탐지할 수 있는 인코딩 형식은 다음과 같다고 합니다. 우리에게 익숙한 EUC-KR 형식도 지원하네요~

 

  • Big5, GB2312/GB18030, EUC-TW, HZ-GB-2312, and ISO-2022-CN (Traditional and Simplified Chinese)
  • EUC-JP, SHIFT_JIS, and ISO-2022-JP (Japanese)
  • EUC-KR and ISO-2022-KR (Korean)
  • KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, and windows-1251 (Russian)
  • ISO-8859-2 and windows-1250 (Hungarian)
  • ISO-8859-5 and windows-1251 (Bulgarian)
  • ISO-8859-1 and windows-1252 (Western European languages)
  • ISO-8859-7 and windows-1253 (Greek)
  • ISO-8859-8 and windows-1255 (Visual and Logical Hebrew)
  • TIS-620 (Thai)
  • UTF-32 BE, LE, 3412-ordered, or 2143-ordered (with a BOM)
  • UTF-16 BE or LE (with a BOM)
  • UTF-8 (with or without a BOM)
  • ASCII

   2. 사용법

- 설치 -

chardet은 기본 모듈이 아니므로 설치를 해줘야합니다.

 

pip install chardet

 

- 사용법 -

이제 기본적인 사용법을 알아보겠습니다. 먼저 야후 웹페이지 내용을 바이트 스트링의 형태로 가져옵니다.

 

rawdata = urllib.request.urlopen('http://yahoo.co.jp/').read()

 

 

이제 이 바이트 스트링의 인코딩 형식을 알아볼 거예요. chardet의 detect 함수를 이용하면 됩니다. 사용법은 아래와 같이 detect 함수에 바이트 스트링을 넘겨주면 됩니다.

 

chardet.detect(rawdata)

 

 

코드를 실행하면 위와 같이 dictionary 형태로 결과를 출력해줍니다. 해당 dictionary에는 encoding, confidence, language라는 키를 갖고 있는데요. 이는 각각 인코딩 형식 예측 결과, 신뢰도, 언어를 뜻합니다. 이때 신뢰가 높을수록 인코딩 형식의 정확도는 높다고 생각하면 되고요. 이 신뢰도는 해당 바이트의 단어수, 자주 사용되는 문자열, 언어의 확률 분포(laugauge specific distribution)에 기반하여 계산된다고 합니다.

 

위 결과는 인코딩 형식은 'utf-8', 신뢰도는 0.99이고 해당 언어는 출력되지 않았음을 의미합니다.

 

언어의 경우 거의 대부분 출력을 안 하는 것 같습니다. chardet 모듈 자체가 언어를 식별하는 데에는 좋지 않다고 하네요.


이번 포스팅에서는 주어진 문자열의 인코딩 형식을 알아볼 수 있는 chardet에 대한 간단한 사용법을 알아보았습니다. 부디 도움이 되셨으면 해요. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.

 

참고자료

https://medium.com/analytics-vidhya/python-character-detection-chardet-27e46218f0bb

https://diveintopython3.net/case-study-porting-chardet-to-python-3.html


댓글


맨 위로