UnicodeをUTF-8などの文字コードに変換する方法

Unicodeは符号化方式が複数あり、複雑な体系をしているので混乱してしまう方も多いようです。

今回はUnicodeの文字コード変換についてご説明します。

Unicodeとは

Unicodeは日本語や英語・フランス語・中国語など世界中の文字を2バイト(16ビット)で一括して登録することを目標とした文字集合です。Unicodeではこの文字集合に含まれている文字にそれぞれUnicodeスカラ値という整数の値を割り振っています。そしてコンピュータ上でテキストを表現する場合にはこれらの値をbyte列に変換する必要があり、この変換方法を符号化方式と言います。符号化方式にはUTF-8やUTF-16、UTF-32などの種類があります。つまり、それぞれの符号化方式によって文字の一つ一つにコンピュータが理解できるような異なる番号を割り振っているということです。

Unicodeには様々な符号化方式がありますが、最もよく使用されているのがUTF-8とUTF-16です。つまり、Unicodeは符号化方式よりもさらに上位の分類を意味しているのです。

Unicodeの様々な符号化方式(文字コード)について

UTF-8

UTF-8はASCIIコードに対して上位互換となっています。そしてASCIIコードに互換性がある部分(半角文字)については1バイトで表現することができますが、漢字や仮名などの全角文字の表現には3バイトを必要とします。そして最長で一文字あたり4バイト必要になるため他の文字コードよりもテキストデータの容量が大きくなる傾向にあります。また2バイト目以降はすべて10で始まるので文字境界は各バイトが0で始まっているか、1が2回以上連続しているかをチェックすれば判別できるので文字の境界が明確であるという特徴があります。

また、UTF-8にはBOMが付けられていません。BOMはByte Order Markの略であり、Unicodeの符号化方式を識別するためのテキストデータの先頭に付与される数バイトのデータを意味します。ただ、UTF-8であれば各バイトの順番ををチェックすることによりビッグエンディアンなのかリトルエンディアンなのか判別できるのでBOMを付与されない場合が多いのです。

UTF-16

UTF-16は英数字も日本語も2バイト(16ビット)で表現されます。そしてビッグエンディアンなのかリトルエンディアンなのかを区別するために先頭にBOMが付与されています。ちなみにリトルエンディアンの場合は先頭の2オクテットが0XFF、0XFEになり、ビッグエンディアンの場合は0XFE、oXFFの順番になります。

テキストエディタでの文字コード対応について

Windowsの標準機能であるメモ帳でも様々な文字コードを扱うことができます。メモ帳を開いて「名前を付けて保存」画面の下部「文字コード」で「Unicode」を選択すると、符号化方式は自動的にUTF-16(リトル・エンディアン)で保存されます。そして「Unicode(Big Endian)」はUTF-16(ビッグ・エンディアン)に、「UTF-8」はそのままUTF-8の符号化方式を採用します。

文字コード変換を行うWebサービス

インターネット上には文字コード変換ができる様々なサービスが存在します。文字コードの仕組みについて詳しく知らなくても手軽に利用できる点が魅力です。

エンコード/デコード

Webページ内の「変換対象のテキスト」というテキストボックス内に文字列を打ち込むと、様々な文字コードに一括して変換されます。UnicodeではUTF-8・UTF-16共に同時に変換することができるので各々の文字コードの相互関係についても一目で分かるようになっています。

まとめ

Unicodeは他の文字コードと異なり様々な符号化方式があります。そしてシーンによりどの符号化方式を用いるべきかはBOMなどの特徴について理解を深めて判断する必要があるでしょう。一見ややこしそうなUnicodeの符号化ですが、Windowsの標準機能で変換自体は容易に行うことができるので、気負わず文字コードの処理を行いましょう。


イベント