PYTHON MEBY

Pythonで文字列をエンコード・デコード(encode, decode)

この記事では、Pythonにおける文字列のエンコードとデコードについて解説します。エンコードとは文字列をバイト列に変換することで、デコードはその逆の変換です。様々なエンコーディング方式と、それらを使用する際の注意点について説明します。

目次

エンコードとは?

エンコードとは、文字列をコンピュータが処理できるバイト列に変換するプロセスです。文字列は人間が読み書きできるテキストデータですが、コンピュータは数値データとしてしか扱うことができません。エンコードによって、文字列をコンピュータが理解できる形式に変換します。

例えば、'こんにちは' という文字列をUTF-8でエンコードすると、特定のバイト列に変換されます。このバイト列は、コンピュータのメモリやファイルシステムに保存されます。

Pythonでは、文字列をエンコードするためにencode()メソッドを使用します。

デコードとは?

デコードとは、エンコードされたバイト列を元の文字列に戻すプロセスです。コンピュータから読み出したバイト列は、人間が読み書きできるテキストデータではありません。デコードによって、バイト列を元の文字列に戻し、表示したり、処理したりできるようになります。

Pythonでは、バイト列をデコードするためにdecode()メソッドを使用します。

エンコーディング方式

様々なエンコーディング方式が存在し、それぞれ異なる文字セットに対応しています。代表的なエンコーディング方式には、UTF-8、Shift_JIS、EUC-JPなどがあります。

UTF-8は、世界中のほとんどの文字を表現できるユニバーサルなエンコーディング方式です。多くのシステムで標準的に使用されており、互換性が高いというメリットがあります。

Shift_JISとEUC-JPは、主に日本語を扱う際に使用されるエンコーディング方式です。これらの方式は、UTF-8と比較して表現できる文字の種類が限られています。

文字化けの対処法

エンコードとデコードの際に、異なるエンコーディング方式を使用すると、文字化けが発生します。文字化けとは、文字が正しく表示されない現象です。

文字化けを防ぐためには、エンコードとデコードで同じエンコーディング方式を使用する必要があります。また、ファイルのエンコーディングを正しく認識することも重要です。

サンプルコード

text = 'こんにちは、世界!'

# UTF-8でエンコード
encoded_text = text.encode('utf-8')
print(f'UTF-8エンコード結果: {encoded_text}')
print(f'UTF-8エンコード結果の型: {type(encoded_text)}')

# UTF-8でデコード
decoded_text = encoded_text.decode('utf-8')
print(f'UTF-8デコード結果: {decoded_text}')
print(f'UTF-8デコード結果の型: {type(decoded_text)}')

# Shift-JISでエンコード
encoded_text_sjis = text.encode('shift_jis')
print(f'Shift-JISエンコード結果: {encoded_text_sjis}')

# Shift-JISでデコード
decoded_text_sjis = encoded_text_sjis.decode('shift_jis')
print(f'Shift-JISデコード結果: {decoded_text_sjis}')

このサンプルコードでは、'こんにちは、世界!'という文字列をUTF-8とShift-JISでエンコード・デコードし、結果を表示しています。出力結果を確認することで、エンコードとデコードの動作を理解することができます。

try:
    incorrect_decoded_text = encoded_text_sjis.decode('utf-8')
except UnicodeDecodeError as e:
    print(f'デコードエラーが発生しました: {e}')

関連記事