Pythonでは、文字列を扱うためのデータ型としてstr
とunicode
があります。これらの違いを理解することは、Pythonでの文字列操作やエンコーディング問題を理解する上で重要です。
strとunicode
Python 2では、str
は8ビット値のシーケンスを含み、ASCII文字のみを表現できます。一方、unicode
はUnicode文字のシーケンスを含み、任意の言語の任意の文字を表現できます。
>>> len('à') # デフォルトはutf-8 -> 2バイトを取る
2
>>> len(u'à') # 1つのコードポイント
1
また、str
とunicode
は、str
が7ビットASCII文字のみを含む場合、演算子を使用して一緒に使用できます。
strとunicodeの使い分け
スクリプト内部では、unicode
に統一するのがベストです。sys.args
など、ライブラリから取得したstr
はすぐにunicode
に変換します。逆に、スクリプト外部に文字列を出すとき(例:print)は、出す直前でunicode
からstr
に変換します。
>>> 'いろはに' + u'ほへと' # UnicodeDecodeErrorが発生
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
このように、Pythonで文字列を扱う際には、str
とunicode
の違いを理解し、適切に使い分けることが重要です。.