Python 3.4で日本語を含むプログラムを実行した際に「SyntaxError: Non-UTF-8 code starting with ‘\x82’」のようなエラーが表示される場合、原因はソースファイルの文字コードとPythonが想定している文字コードが一致していないことです。この記事では、cp932で保存されたPythonソースコードを正しく実行するための文字コード指定方法について解説します。
Python 3ではソースコードの文字コード指定が必要になる
Python 3では、Pythonファイルのソースコードは基本的にUTF-8で記述されていることを前提としています。そのため、Windows環境などで作成されたcp932(Shift_JIS互換)のファイルに日本語が含まれている場合、Pythonは正しく読み取れずSyntaxErrorを発生させます。
例えば、以下のようなコードをcp932で保存した場合があります。
print(“あ”)
見た目では問題なくても、ファイル内部では「あ」という文字がcp932のバイト列で保存されているため、PythonがUTF-8として解釈しようとしてエラーになります。
ソースコードの文字コードはcodingコメントで指定する
Pythonでは、ソースコードの先頭部分にエンコーディング宣言を記述することで、ファイル自体の文字コードを指定できます。
cp932で保存したPythonファイルの場合、1行目または2行目に以下の記述を追加します。
# -*- coding: cp932 -*-
このコメントを追加すると、Pythonはファイルをcp932として読み込み、日本語を含むソースコードを正しく解釈できるようになります。
実際の記述例と保存時の注意点
例えば、cp932で保存するPythonファイルは以下のようになります。
# -*- coding: cp932 -*-
print(“あ”)
重要なのは、このコメント自体もファイルの先頭にcp932またはASCII互換の形式で保存されている必要があることです。通常、エディタでcp932形式を選択して保存すれば問題ありません。
また、codingコメントは1行目または2行目に記述する必要があります。3行目以降に書いてもPythonは認識しません。
Python 3.4で利用できる文字コード指定の形式
Pythonのエンコーディング指定はPEP 263で定められた形式に従います。以下のような書き方も可能です。
# coding: cp932
# -*- coding: shift_jis -*-
cp932はWindows環境で一般的に利用される文字コードで、Shift_JISを拡張したものです。Windowsで作成された古いPythonプログラムではcp932指定が必要になるケースがあります。
環境変数PYTHONUTF8では解決できない理由
PYTHONUTF8はPythonのUTF-8モードに関する設定ですが、これはソースコードの文字コードを変更するための設定ではありません。
そのため、cp932で保存されたPythonファイルを実行する場合は、環境変数を変更するのではなく、ソースコード側で正しいエンコーディングを指定する必要があります。
例えば、読み込む外部ファイルの文字コード指定であればopen関数のencoding引数を使用しますが、今回のようなPythonプログラム自身の文字コード指定ではcodingコメントを使用します。
ソースファイルをUTF-8へ変換する方法も有効
現在ではUTF-8が標準的な文字コードとして広く利用されているため、可能であればPythonファイル自体をUTF-8で保存し直す方法もおすすめです。
Visual Studio Codeやメモ帳などのエディタでは、文字コードを指定して保存できます。cp932の古いファイルをUTF-8へ変換すれば、codingコメントを追加しなくてもPython 3で問題なく実行できます。
ただし、既存システムとの互換性や古いWindows環境で利用する場合は、cp932指定を残したほうが安全なケースもあります。
まとめ|Python 3.4でcp932のプログラムを動かすにはcoding指定を追加する
Python 3.4でcp932形式のソースコードを実行するときは、ファイル先頭に「# -*- coding: cp932 -*-」というエンコーディング宣言を追加します。
PYTHONUTF8などの設定ではPythonソースファイルの文字コード問題は解決できないため、ソースコードの文字コードをPythonへ明示的に伝えることが重要です。
また、可能であればファイルをUTF-8へ変換することで、現在のPython環境ではより扱いやすいプログラムになります。


コメント