晴耕雨読

working in the fields on fine days and reading books on rainy days

[Python] Windowsで作成されたShift-JISファイルを開く方法

Pythonを使って、Windowsで作成されたShift-JISファイルを開く場合、指定するエンコードは cp932 を指定します。 open関数の encoding 引数に指定してファイルを開きます。

似ている名前で shift_jis もありますが、こちらでは開く際にエラー「codec can't decode byte」が発生します。 理由は、Windows で使われている cp932 は shift_jis をベースに作られていて、Windows用に文字(外字)を追加して、shift_jis と cp932 で文字種類数が異なるからです。

組み込み関数のopen()を使ってエンコードを指定するには、以下のようにencoding引数を使います。

with open('in.txt', 'r', encoding='cp932', newline='\n') as f:
    text = f.read()

with open('out.txt', 'w', encoding='cp932', newline='\n') as f:
    f.write(text)

補足:open関数ではデフォルトで読み込み時に改行の自動変換(\r\n\n)が発生します。 自動変換を回避するには、ファイルを開く際に行の区切りとして newline='\n' を指定する必要があります。

以上です。

参考資料