この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
# シフトJISエンコードのテキストファイルの読み込み
with open('sjis.txt', encoding='shift_jis') as f:
s = f.read()
print(s.rstrip()) # このファイルはシフトJISでエンコードされています
# UTF8エンコードのテキストファイルの読み込み
with open('utf8.txt', encoding='utf-8') as f:
s = f.read()
print(s.rstrip()) # このファイルはUTF-8でエンコードされています
# バイナリファイルとして読み込んだ後にエンコーディングを指定してデコード
with open('sjis.txt', 'rb') as f:
b = f.read()
s = b.decode('shift_jis')
print(s.rstrip()) # このファイルはシフトJISでエンコードされています
# シフトJISエンコードでテキストファイルに書き込み
with open('sjis-2.txt', 'w', encoding='shift_jis') as f:
f.write('このファイルもシフトJISでエンコードされています\n')
with open('sjis-2.txt', encoding='shift_jis') as f:
print(f.read().rstrip())
# UTF-8エンコードでテキストファイルに書き込み
with open('utf8-2.txt', 'w', encoding='utf-8') as f:
f.write('このファイルもUTF-8でエンコードされています\n')
with open('utf8-2.txt', encoding='utf-8') as f:
print(f.read().rstrip())
Pythonのopen関数でテキストファイルをオープンする場合、特に指定をしない限り、コードを実行しようとしているプラットフォームごとに定められているエンコーディングを使って、そのファイルがオープンされる。例えば、macOSならテキストファイルがUTF-8でエンコードされていると見なされ、Windows(日本語版)ならCP932(≒シフトJIS)でエンコードされていると見なされる。
そのため、macOSからPythonでシフトJISのテキストファイルを読み込もうとすると例外が発生するし、Windows(日本語版)からPythonでUTF-8のテキストファイルを読み込もうとするとやはり例外が発生する。以下はその例だ。
このように、手元のマシンとは別のマシンで作成されたテキストファイルが自分が普段使っているのとは異なるエンコーディングになっていることはよくある。オープンしようとしているテキストファイルのエンコーディングが分かっていれば、open関数のencodingパラメーターで、それを明示することで、デフォルトのエンコーディングとは異なる形式のテキストファイルも読み込めるようになる。
例えば、テキストファイルを読み込む際に、それがシフトJISでエンコードされていることを明示するには次のようにする。
with open('sjis.txt', encoding='shift_jis') as f:
s = f.read()
print(s.strip())
これをmacOS上で実行した結果を以下に示す。
同様にUTF-8エンコードされていることを明示して、ファイルをオープンするには次のようにする。
with open('utf8.txt', encoding='utf-8') as f:
s = f.read()
print(s.strip())
これをWindowsで実行した結果を以下に示す。
Copyright© Digital Advantage Corp. All Rights Reserved.