ページ更新: 2012-12-13 (木) (2413日前)

(2012-12-09)

chardet モジュールは、バイト列から文字コードを推定する機能を提供する。

目次

[編集]

情報源 #

[編集]

メモ #

[編集]

chardet モジュールに付属するスクリプト chardetect.py の実行例 #

(2012-12-13)

Windows XP, Python 2.7.x , GnuWin32 find, xargs を使用して、 カレントディレクトリ以下の *.cpp と *.h の文字コード名を表示してみた。

C:> c:\gnuwin32\bin\find . -name "*.cpp" -o -name "*.h" | c:\gnuwin32\bin\xargs python c:\Python27\Scripts\chardetect.py
./CPP-sample/LimitedOStream/src/limited_ostream.h: UTF-8 with confidence 1.0
./CPP-sample/LimitedOStream/src/limited_ostream_sample.cpp: UTF-8 with confidence 1.0
./CPP-sample/LimitedOStream/src/membuf.h: utf-8 with confidence 0.99
./CPP-sample/LimitedOStream/src/nullostream.h: UTF-8 with confidence 1.0
./CPP-sample/LimitedOStream/src/teestream.h: UTF-8 with confidence 1.0
./OpenCV-sample/WebCam/usbcam_main.cpp: SHIFT_JIS with confidence 1
./OpenMP-check/OpenMP-check.cpp: SHIFT_JIS with confidence 1
./OpenMP-sample/src/common_util.h: SHIFT_JIS with confidence 0.99
./OpenMP-sample/src/hello_openMP.cpp: ascii with confidence 1.0
./OpenMP-sample/src/local_stdint.h: UTF-8 with confidence 1.0
./OpenMP-sample/src/main.cpp: SHIFT_JIS with confidence 1
./OpenMP-sample/src/platform_util.cpp: SHIFT_JIS with confidence 1
./OpenMP-sample/src/platform_util.h: SHIFT_JIS with confidence 1
./OpenMP-sample/src/sample1.cpp: SHIFT_JIS with confidence 1
./OpenMP-sample/src/sample2.cpp: SHIFT_JIS with confidence 1
./OpenMP-sample/src/sample3.cpp: SHIFT_JIS with confidence 1
./Windows-tools/SetSuspendState/winmain.cpp: UTF-8 with confidence 1.0

chardetect.py は、ファイル名、文字コード、文字コード判定の信頼度 (0 〜1) を出力する。

[編集]

自分で書いたスクリプト detect_charset.py #

(2012-12-09)

chardetect.py の中でいろいろやりたくなりそうなので、自分で書いてみた。

detect_charset.py:

# -*- coding: utf-8 -*-

from optparse import OptionParser

import chardet

def check_charset_in_file(filename, detect_length):
    """ファイル filename を開き、
    先頭から指定した長さ defect_length だけ読み込んで、
    文字コードを判定した結果を返す"""

    with open(filename, 'rb') as file:
        buf = file.read(detect_length)

    return chardet.detect(buf)

def main():
    """コマンドラインで指定されたファイルの文字コードを判定して表示する
    ファイル(複数指定可能)と、
    オプション(文字コードの判定に、ファイル先頭から何byteまでを使うか: デフォルトは16Kbyte) を
    指定できる。
    """

    ## コマンドライン引数を定義する
    parser = OptionParser()
    parser.add_option('-l', '--detect_length',
        dest='detect_length',
        type='int',
        default=16 * 1024)

    ## 引数を解析する
    (options, args) = parser.parse_args()

    ## ファイルごとに文字コードを判定して表示する
    for filename in args:
        result = check_charset_in_file(filename, options.detect_length)
        print("%s : encoding = %s confidence = %3.2f"
            % (filename, result['encoding'], result['confidence']))

if __name__ == '__main__':
    main()

実行例 (GnuWin32 find, xargs を併用)

C:> c:\gnuwin32\bin\find . -type f -name "*.cpp" -o -name "*.h" | c:\gnuwin32\bin\xargs python detect_charset.py
./CPP-sample/LimitedOStream/src/limited_ostream.h : encoding = UTF-8 confidence = 1.00
./CPP-sample/LimitedOStream/src/limited_ostream_sample.cpp : encoding = UTF-8 confidence = 1.00
./CPP-sample/LimitedOStream/src/membuf.h : encoding = utf-8 confidence = 0.99
./CPP-sample/LimitedOStream/src/nullostream.h : encoding = UTF-8 confidence = 1.00
./CPP-sample/LimitedOStream/src/teestream.h : encoding = UTF-8 confidence = 1.00
./OpenCV-sample/WebCam/usbcam_main.cpp : encoding = SHIFT_JIS confidence = 1.00
./OpenMP-check/OpenMP-check.cpp : encoding = SHIFT_JIS confidence = 1.00
./OpenMP-sample/src/common_util.h : encoding = SHIFT_JIS confidence = 0.99
./OpenMP-sample/src/hello_openMP.cpp : encoding = ascii confidence = 1.00
./OpenMP-sample/src/local_stdint.h : encoding = UTF-8 confidence = 1.00
./OpenMP-sample/src/main.cpp : encoding = SHIFT_JIS confidence = 1.00
./OpenMP-sample/src/platform_util.cpp : encoding = SHIFT_JIS confidence = 1.00
./OpenMP-sample/src/platform_util.h : encoding = SHIFT_JIS confidence = 1.00
./OpenMP-sample/src/sample1.cpp : encoding = SHIFT_JIS confidence = 1.00
./OpenMP-sample/src/sample2.cpp : encoding = SHIFT_JIS confidence = 1.00
./OpenMP-sample/src/sample3.cpp : encoding = SHIFT_JIS confidence = 1.00
./Windows-tools/SetSuspendState/winmain.cpp : encoding = UTF-8 confidence = 1.00