経緯
PythonでDBから取り込んだStringデータをEXCELに出力しようとしたときに文字コードのエラーでハマってしまって、そもそも変数に入ってる文字コードがわからないとエンコードできないなってことで調べてみるとChardetという外部モジュールを使うことで文字コードを調べる事ができるようなので使ってみることにした。
インストール
pipパッケージでインストールが可能です。パッケージ管理アプリを入れている場合はそれぞれのパッケージ管理アプリのインストールコマンドで。
$ pip install chardet
使い方
実際に使って試してみます。テキストエディタ(私はsakuraエディタを使用)でUTF-8とSJISの2種類のファイルを作成しておきます。linuxコマンドのnkfコマンドを使って一旦確認してみます。
$ nkf --guess sjis.txt Shift-JIS $ nkf --guess utf-8.txt UTF-8
ということでそれぞれShift-JISとUTF-8になっていることがわかります。
これらをそれぞれ読み込んで、文字コードを表示してみます。注意しないと行けないのは、読み込むときはバイナリモードで読み込む必要があります。
import chardet # Shift-JISをチェック with open('./sjis.txt', 'rb') as f1: str1 = f1.read() print(chardet.detect(str1)) # UTF-8をチェック with open('./utf-8.txt', 'rb') as f2: str2 = f2.read() print("--- Shift-JIS : %s " % chardet.detect(str1)) print("--- UTF-8 : %s " % chardet.detect(str2))
上記の実行結果は次の通り。
--- Shift-JIS : {'encoding': 'SHIFT_JIS', 'confidence': 0.99, 'language': 'Japanese'} --- UTF-8 : {'encoding': 'utf-8', 'confidence': 0.99, 'language': }
encodingを見ると文字コードがわかるので、これで判定できそうです。
文字コードに合わせて処理を分けるときに使えそうです。