Pythonは、多様な文字を扱うためにUnicodeを使用しています。Python3ではデフォルトでUTF-8が設定されています。これにより、Pythonプログラムはさまざまな可能性のある文字を扱うことができます。
Python3では、open
関数がencoding
引数を受け取るようになりました。これにより、ファイルを扱う際には、文字エンコーディングを指定することが推奨されています。以下にその例を示します。
with open('utf-8.txt', encoding='utf-8') as fp:
text = fp.read()
このようにすることで、OSやロケールに依存せずにファイルを扱うことが可能になります。
また、Python2とPython3の両方で動作するライブラリを書く場合は、バイナリモードで開いてからUTF-8に変換するか、codecs
モジュールを使用することが推奨されています。以下にその例を示します。
import locale
import codecs
import six
locale.setlocale(locale.LC_CTYPE, ('C'))
with open('utf-8.txt', 'rb') as fp:
text1 = fp.read()
text1 = six.text_type(text1, 'utf-8')
with codecs.open('utf-8.txt', 'r', encoding='utf-8') as fp:
text2 = fp.read()
assert text1 == text2
以上のように、Pythonでは文字エンコーディングを明示的に指定してファイルを扱うことが推奨されています。これにより、意図しないエラーを避けることができます。