1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Renewal】Pythonを使って、頭にくるテキストデータのエンコードを一括で調べよう!

Last updated at Posted at 2023-04-19

テキストデータを扱ってると頭にくる!

※2023/7/19 バグを見つけたので、改修しました。
ついでにフォルダ指定をGUIで出来るようにしました。

テキストデータを解析しようとすると、めっちゃ頭にくることがありませんか?

そう。エンコーディングです。

なんでこんなに種類があるんだ!

windowsはshift-JISが多いけど、他にascii,unicode,utf-8,utf-16,utf-32さらに、BOM付とか無しとか、モー、わけわからん。

テキストを扱うプログラム作ると、予期せぬことの原因が、エンコードってよくありませんか?
文字化けすれば、なんとなくわかるけど、BOM付だと、最初に?が入ったり、utfだと、読み込みがエラーになったり。

プログラムのデバッグの最中に、関係ないところを変更して、悩んだことないですか?
私は結構あります。

ということで、このテキストのencodingは何だ?を表示するプログラムをpythonで作りました。
ちょっといじると、中身の表示もできます。

ということで、ソース公開します。

import os.path
from glob import glob
import chardet
import tkinter
import tkinter.filedialog
import tkinter.messagebox

# フォルダ選択ダイアログの表示
root = tkinter.Tk()
root.withdraw()
tkinter.messagebox.showinfo('テキストファイルのエンコード表示', '確認対象ディレクトリを選択してください!')
scan_path = tkinter.filedialog.askdirectory()+"/*"
filepaths = glob(scan_path)  # globで一気に全ファイル名を取得できる。

# ファイルごとに処理
for file in filepaths:
    if os.path.isfile(file):
        # ファイルをバイナリモードで読み込む
        # print(f"・・・ファイル名: {file} 確認中")
        with open(file, "rb") as f:
            root, ext = os.path.splitext(file)
            data = f.read()
            # 文字コードやエンコーディングを推定する
            encoding = chardet.detect(data)["encoding"]
            # 文字コードやエンコーディングがNoneでない場合はテキストデータと判断する
            if encoding is not None:
                text = data.decode(encoding)
                print(f"ファイル名: {file}")
                print(f"文字コード: {encoding}")
#            else:
#                print(f"ファイル名: {file} は、テキストファイルではありません。")

ちなみに、私のwindows10のhostsは、UTF-8-SIGって出るんです。

これって正常?

UTF-8-SIGって、よくわからないけどBOM付のUTF-8なのかな?

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?