PythonのUnicodeとは?文字列⇔バイト列に変換する方法


Unicodeとは
文字列をUnicodeのバイト列に変換したい
Unicodeのバイト列を文字列に変換したい

Unicodeと聞くと、なんだか難しそうなイメージを受ける方も多いかもしれません。そもそもUnicodeについてよくわかっていなかったり、使い方がわからなかったり、Unicodeに変換するってどういうことがいまいちわからない…なんて方が多いのではないでしょうか?

そこで、この記事ではUnicodeについて、基本的な解説から文字列、バイト列の変換方法までわかりやすく解説いたします。

Unicodeとは

まずはUnicodeとはどういうものかについて、知っておきましょう。Unicodeは文字コードの中の一つの規格になります。

よく「Unicode = 文字コード」と間違われやすいのですが、Unicodeは文字の集合であるということを知っておきましょう。Unicodeを表すために、UTF-8などの符号化方式が用意されています。

詳しくはこちらの記事をご覧ください。

文字列をUnicodeのバイト列に変換する方法

それでは文字列をUnicodeのバイト列に変換してみましょう。バイト列はPythonではbytes型として用意されています。

こちらのコードを見てみましょう。

word = "こんにちは"
enc = word.encode('unicode-escape')
print(enc)
print(type(enc))

実行結果

b'\\u3053\\u3093\\u306b\\u3061\\u306f' # 表示されたバイト列
<class 'bytes'> # bytes型の確認

文字列型のencodeメソッドを使うことでUnicodeエスケープされたバイト列を作ることが出来ましたね。

引数に指定した「unicode-escape」はPython独自のエンコーディング方式なのでPython以外では使えないということに気をつけましょう。

Unicodeのバイト列を文字列に変換する方法

次は先程の操作の逆、Unicodeのバイト列を文字列に変換してみましょう。

こちらのコードをご覧ください。

word = "こんにちは"
enc = word.encode('unicode-escape')
dec = enc.decode('unicode-escape')
print(dec)
print(type(dec))

実行結果

こんにちは # バイト列から変換された文字列
<class 'str'> # str型(文字列型)の確認

このように先程の動作の逆をすることが出来ましたね。

これまでの操作から、

  • 文字列 → バイト列をエンコード
  • バイト列 → 文字列をデコード

と呼ぶことを知っておきましょう。

UnicodeEncodeErrorについて

これまで文字列とバイト列を扱う方法について見てきましたが、このバイト列は基本的には扱うことはありません。

ただ、Python内部で完結する場合は文字コードを不用意に触る必要は無いという意味で、外部ファイルから文字を扱う場合はバイト列として扱ったほうが良い場合もあります。

そしてこれまでの結果から、Unicodeを扱えるstr型(文字列型)と、その他のエンコーディング方式を扱うことの出来るbytes型があることもわかりました。

これらの変換がうまくいかないとき、UnicodeEncodeErrorが起きるときがあります。Pythonの内部ではprint関数などで出力をするときに、自動的にシステムのエンコーディング方式に合わせて表示しようとします。

そのバイト列にUnicodeに無い(変換できない)部分があると、UnicodeEncodeErrorが発生します。このエラーはシステムのエンコーディング方式がUTF-8ではなくCP932が採用されているWindowsで発生しやすいエラーになります。

そしてこのエラーが出るとエラーが出た箇所のバイト列を削除する必要が出てきてしまいます。基本的にはPythonの内部ではUTF-8を使うことを心がけましょう。

また外部ファイルを使う場合はcodecsモジュールのopenメソッドを使ってエンコーディング方式を指定して使うようにしましょう。

まとめ

今回はPythonでUnicodeをエンコード、デコードする方法について解説してきました。UnicodeとUTF-8等の文字列との関係についてもわかって頂けたかと思います。

普段のプログラミングではあまり触れない部分かもしれませんが、知っておいて損はありません。もし文字列のエンコード、デコードについて忘れてしまった場合は、ぜひまたこの記事を読んでみてください。

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説