TSUBOCK★LABO-ツボックラボ-

とあるセキュリティエンジニアの技術メモブログ

MENU

Pythonで文字コードを調べることができるchardetを使ってみた

経緯

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を見ると文字コードがわかるので、これで判定できそうです。

文字コードに合わせて処理を分けるときに使えそうです。