Python

【Python】encode・decodeメソッドで、文字列⇔文字コードをかんたん変換!(UTF-8・Shift_JIS)

【PR】この記事には広告を含む場合があります。

47402098_building-website-project

Pythonを使っていると、文字コードや文字列の変換が必要になることがありますよね。

でも、文字コードって何?どうやって変換すればいいの?と疑問に思ったことはありませんか?

やり方はかんたんです。

encode」メソッドと「decode」メソッドを使えば、あっという間に文字列と文字コードの変換ができるようになります!


UTF-8ASCIIShift_JISといった代表的な文字コードの変換プログラムもまじえて解説しています。

実際にプログラムを動かすことで、どのように文字列と文字コードを変換するのか理解が深まると思います。ぜひ実際にコードを入力して動かしてみて下さいね。

情報を提供する人
情報を提供する人

Pythonの標準文字コード(バージョン3.x以降)は UTF-8です。

UTF-8:Unicode Transformation Format, and the ‘8’

Python ソースコードのデフォルトエンコーディングは UTF-8 なので、文字列リテラルの中に Unicode 文字をそのまま含めることができます

出典:>> Unicode HOWTO Pythonドキュメント


文字列 ⇔ バイト列(文字コード) 変換メソッド

Pythonには、文字列とバイト列(文字コード)を相互に変換するメソッド「encode()」 と 「decode() 」があります。

このメソッドを使うと、「文字列がどんなバイト列か?」、具体的な値を確認できます。


encode メソッド

'文字列'.encode('文字コード名')

文字列をバイト列に変換することを、エンコード(Encode:符号化)と言います。


decode メソッド

b'バイト列'.decode('文字コード名')

逆に、バイト列を文字列に戻すことを、デコード(Decode:復号化)と言います。


質問する人
質問する人

バイト列」とは?

回答

「1バイトのデータを並べた、データの集まり」のことです。

(例)b'\xe3\x81\x82'

左端の「b」は、「バイト列」を意味する記号です。

その隣の「xe3」の「x」は、「16進数形式」を意味する記号です。

数字「e3」が、16進数形式で表示された「1バイト(8ビット)」のデータです。


メソッドの実行方法

この記事では、メソッドの実行をPythonのスクリプトファイルを作成せずに、ターミナル上で直接入力して実行しています。

Visual Studio Cod(Microsoft社の無料のコード エディター)の実行画面だと、こんな感じです。自分の環境に合わせて実行してもらえればOKです。

shift-jis_utf-8_encode_vsc

上記の実行内容を説明すると、最初のコマンド2行「import sys」と「sys.getdefaultencoding()」で、自分のPython環境の、エンコード方式のデフォルト設定を確認してます。

通常のPython環境では、上記画面の実行結果「'utf-8'」のように、UTF-8 がデフォルト設定になっていると思います。


[エンコード方式の確認コマンド]

import sys
sys.getdefaultencoding()


(参考)コマンドの実行手順

ターミナルを起動 ⇒ 「python」と入力してエンターキー ⇒ 「>>>」が表示 ⇒ コマンドを入力してエンターキー ⇒ コマンドが実行されます。


「>>>」の状態から、コマンドプロンプトに戻りたい場合は、「Ctrl+z」とキー入力します。


文字列 ⇔ バイト列を実際に変換してみよう

実際に、文字列 ⇔ バイト列(文字コード)を相互に変換してみましょう。以下の3種類のサンプルソースを用意しています。

サンプルプログラム3つ


以下のリンクでは、『文字コードの基礎の基礎』を説明しています。

もし「文字コードって、なんだっけ?」、とぼんやりしている場合は、おさらいも兼ねてぜひ読んでみてください。

>>文字コードとは?文字コードの確認方法や、文字化けの原因・対処法がわかる!

あわせて読みたい
laptop-computer-06136
文字コードとは? CSVファイル (Excel) の文字化けの原因・直し方がわかる!

続きを見る

情報を提供する人
情報を提供する人

プログラミングするときに「文字コード」、ってあまり意識しないですよね?

でも、「日本語」を扱う場合は特に重要な知識です!


サンプル① 『UTF-8』のバイト列へ変換する

文字 ⇒ UTF-8のバイト列へ変換してみましょう。

コマンド①

「あ」を UTF-8 のバイト列へ変換します。

'あ'.encode('utf-8')

実行結果

b'\xe3\x81\x82'


今度は、逆に、上記実行結果で得られたUTF-8のバイト列を、変換の文字列へ戻してみましょう。

コマンド②

b'\xe3\x81\x82'.decode('utf-8')

実行結果

変換の文字「あ」に戻りました。

'あ'


サンプル②『ASCII』のバイト列へ変換する

文字 ⇒ ASCIIのバイト列へ変換してみましょう。

コマンド①

「A」を ASCII のバイト列へ変換します。

ord('A')

実行結果①

以下のような結果が出ました。↓ この値は、10進数表示です。

65


コマンド②

↑ 上記結果を hex()関数で、16進数表示へ変換してみましょう。hex()は、Pythonの組み込み関数です。

hex(65)

実行結果②

16進数表示の結果が得られました。

'0x41'


上記コマンド①と②を、1行でまとめて書けます。結果はもちろん同じです。

コマンド ③

hex(ord('A'))

実行結果③

16進数表示の結果が得られました。

'0x41'


今度は、逆に、ASCIIのバイト列 ⇒ 文字へ変換してみます。

コマンド④

上記実行結果で得られたバイト列を、変換の文字列へ戻してみましょう。

chr(0x41)

実行結果④

変換の文字「A」に戻りました。

'A'


サンプル③『Shift_JIS』のバイト列へ変換する

文字 ⇒ Shift_JISのバイト列へ変換してみましょう。

コマンド①

「あ」を Shift_JIS のバイト列へ変換します。

'あ'.encode('shift_jis')

実行結果①

b'\x82\xa0'


今度は、逆に、上記実行結果で得られたShift_JISのバイト列 ⇒ 文字列へ戻してみましょう。

コマンド②

b'\x82\xa0'.decode('shift_jis')

実行結果②

変換の文字「あ」に戻りました。

'あ'


まとめ:文字列⇔文字コードをかんたんに変換!

この記事では、Pythonで、文字列と文字コード(バイト列)を変換するコードの書き方を紹介しました。

文字コード」は普段あまり意識しないかもしれませんが、「日本語」を扱う場合は特に重要な知識です。

こういう目立たないけど重要な知識をおさえておくと、開発現場でほんとに必要になったときにきちんと説明できあれば、あなたは周りから一目置かれる存在になると思います。


ところで、Pythonを学ぶと、「将来どんなキャリアを歩めるのか?」、「どんな場面で役に立つのか?」、気になりませんか?

以下のリンクでは、Pythonのスキルを活かせる、代表的な4つの仕事を紹介しています。

「将来どうしようかな~」と、まだぼんやりしているのであれば、自分の未来を見つけるためにもぜひ読んでみてください。

>>【初心者向け】Pythonでできること・できないこと

あわせて読みたい
smiling-software-engineer
【初心者向け】Pythonでできること・できないこと。具体例でわかりやすく解説

続きを見る


-Python