はじめに
Pythonの文字コードを扱うときに毎回調べてしまっているので忘れないようにざっくりまとめる。
基本的な単語
まずは基本的な単語の意味を押さえておく。
文字集合
名前の通り、数字や英字などの文字を集めたもの。
文字コード
文字集合に対して数値を割り当てたもの。
コンピューターさんは数値しか認識できないので、文字集合は全て数値で表す。その割り当てられた数値を文字コードという。
例:大文字のAは65という数値で表される。この65が文字コード。
エンコード
文字と文字コードを変換させるためのルール。
「この文字はこの数値で表すよ」というルール。
ASCIIエンコード
Amarican Standarde Code for Information Interchangeを略したもの。
コンピューターでもっとも利用されるエンコード方式。128種類の文字に対する数字が決められている。
2進数7ビットで表現される。
ISO 8859
ASCIIが持っていない文字を追加したエンコード方式。
2進数8ビットで表現される。(256種類の文字を扱える。)
Latin-1とも呼ばれる。
マルチバイト文字
1文字を複数のバイトで表現する。
ASCIIやISOは1文字1バイトで表現しているが、日本語や韓国語等は256種類以上の文字を扱うため、扱える文字数を増やすためにマルチバイト文字で表現する。
ユニコード
全ての国の言語で共通して利用できるエンコード方式。
主な言語で使用される文字を集め、1つ1つにユニコード番号という番号を割り当てて基準化したもの。
UTF-8は、ユニコードで扱う文字集合をコンピュータで扱うときに利用されるエンコード方式。
バイト型
ユニコードからエンコード変換された文字列をPython3で扱う際の文字列オブジェクト。
バイト型の文字列は、 b'~'
というリテラルでも定義できる。
文字コード変換のメソッド
encode()メソッド
文字列オブジェクトをバイト型に変換する。引数には。変換したいエンコードを指定する。
encode(エンコード名, エラー処理の方法)
※エラー処理の方法については後述
decode()メソッド
バイト型の文字列を文字列型に変換する。
decode(エンコード名, エラー処理の方法)
※エラー処理の方法については後述
エラー処理の方法
文字コードの変換を行う際に使用するエラー処理の方法は以下。
strict
エラーの際、例外のエラーを出して変換を停止する。エラー処理の方法を指定しないデフォルトの方法はこちらが採用される。
replace
変換できない文字列があると、 ?
などの文字に置換して返し、変換を継続する。
ignore
変換できない文字列があると、その文字列は除外され、変換を継続する。
スクリプトファイルのエンコード指定
Pythonには、スクリプトファイルのエンコードを指定する機能があり、
Python2まではコメントや文字列に日本語を使用する場合必ずエンコードを指定する必要がある。
Python3以降は、UTF-8がデフォルトで採用されている。
スクリプトファイルのエンコードを指定する場合
# coding:エンコード名
または
# coding=エンコード名
を記述する。なお、 coding
の文字列前後には、以下のように任意の文字列を記述できる。
# -*- coding:エンコード名 -*-
文字化け
Pythonで日本語を扱う際、文字化け問題が起こりやすい。これは、正しいエンコード方法を指定できていない場合に起きる。
日本語では、文字集合を数値に置き換えるエンコードが複数あり、文字集合が同じ場合でもエンコードが異なると、異なる数字が割り当てられ違う文字に変換されることがある。この現象を文字化けという。
文字化けが起きる場合、エンコードの設定が正しいかどうかを確認する。