UTF-8 とは
コンピューター上のテキストは、すべて数値として保存されています。Unicode は、それぞれの文字にコードポイントと呼ばれる番号を割り当てた一覧表です。アルファベットの A は U+0041、é は U+00E9、ユーロ記号 € は U+20AC、ひらがなの あ は U+3042 です。UTF-8 は、こうしたコードポイントをバイトに変換するためのルールです。
UTF-8 は、Web、JSON、ほとんどのプログラミング言語、最近の OS で標準となっている文字コードです。いちばんの長所は、ASCII だけのテキストが変化しないことです。A は1バイトの 41 のままです。それ以外の文字は2、3、4バイトを使い、それらのバイトはすべて128以上なので、ASCII と取り違えることはありません。
UTF-8 ツールの使い方
エンコードする。 「テキスト」欄に入力します。UTF-8 のバイトが「UTF-8 バイト」欄に表示されます。「コピー」を押すと取り出せます。
デコードする。 「UTF-8 バイト」欄にバイトを貼り付けます。左側に文字が表示されます。「バイト形式」が貼り付けるデータの形式と合っているか確認してください。
バイト形式では、バイトの書き表し方を6種類から選べます。
- 16進数バイト:C3 A9:読んだりデバッグしたりするとき向け
- エスケープ:\xC3\xA9:コードの文字列リテラル向け
- パーセント:%C3%A9:Webアドレスで使われる形式
- 10進数:195 169:バイト配列向け
- 2進数:11000011 10101001:ビットの並び方を学ぶとき向け
- 文字化けテキスト:é(文字化けを修正):間違った文字コードで読まれたテキストの修復向け
1文字ずつの表示。 ツールの下の表には、すべての文字がコードポイント、UTF-8 のバイト、バイト数とともに一覧表示されます。集計欄には、全体の文字数とバイト数が表示されます。スペース、タブ、改行も名前で表示されるので、目で確認できます。たとえば あ は U+3042、E3 81 82、3バイトと表示されます。
UTF-8 の仕組み
使うバイト数は、コードポイントの大きさで決まります。
| コードポイント | バイト数 | ビットパターン |
|---|---|---|
| U+0000 から U+007F | 1 | 0xxxxxxx |
| U+0080 から U+07FF | 2 | 110xxxxx 10xxxxxx |
| U+0800 から U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000 から U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
最初のバイトが、後ろに何バイト続くかを示します。続くバイトはすべて 10 で始まります。この仕組みにより UTF-8 は自己同期性を持っています。データの途中からでも、プログラムは必ず次の文字の始まりを見つけられます。ひらがな、カタカナ、よく使う漢字はすべて U+0800 から U+FFFF の範囲にあるので、3バイトになります。
変換例
| 文字 | コードポイント | UTF-8 16進数 | 10進数 |
|---|---|---|---|
A |
U+0041 | 41 |
65 |
é |
U+00E9 | C3 A9 |
195 169 |
ñ |
U+00F1 | C3 B1 |
195 177 |
ß |
U+00DF | C3 9F |
195 159 |
€ |
U+20AC | E2 82 AC |
226 130 172 |
日 |
U+65E5 | E6 97 A5 |
230 151 165 |
| 親指を立てた絵文字 | U+1F44D | F0 9F 91 8D |
240 159 145 141 |
文字化けの修正
ここで扱う文字化けは、UTF-8 のバイトが Windows-1252 や Latin-1 として読まれたときに起きるものです。1バイトがそれぞれ別の文字になってしまうため、2バイトの文字が2つの奇妙な記号に化けます。
| 正しいテキスト | 化けた表示 |
|---|---|
café |
café |
naïve |
naïve |
It’s |
It’s |
€ |
€ |
「文字化けテキスト」形式は、これを元に戻します。化けた文字をそれぞれ元のバイトに戻し、そのバイトを UTF-8 として読み直します。日本語でも同じ種類の文字化けなら直せます。たとえば テスト は テスト に戻ります。この間違いからは生じ得ない文字が含まれている場合は、推測で変換せずにその旨を表示します。
なお、日本でよく見かける Shift_JIS と UTF-8 の取り違えによる文字化け(「譌・譛ャ隱」のような漢字の羅列)は、別の種類の間違いなので、この機能では修正できません。
ヒントと制限
- ファイルは UTF-8 で保存しましょう。 文字化けの多くは、ある文字コードで保存したファイルを別の文字コードで開くことから始まります。エディタで保存するときは UTF-8 を選んでください。
- 文字コードを宣言しましょう。 HTML では、ページの先頭に
<meta charset="utf-8">を書きます。 - Excel と CSV ファイル。 古いバージョンの Excel は CSV の文字コードを推測して開きます。「CSV UTF-8」形式で保存すると、アクセント記号や日本語が崩れるのを防げます。
- 修正は1回分だけです。 2回文字化けしたテキストは、修正を2回かける必要があります。
- 表に表示されるのは500文字までです。ページの動作を軽くするためです。バイト数は常にテキスト全体を対象に数えます。
そのほかの方法
Python。 'café'.encode('utf-8') は b'caf\xc3\xa9' を返します。文字化けを直すには、'café'.encode('cp1252').decode('utf-8') で café が返ります。
JavaScript。 new TextEncoder().encode('é') はバイト 195 と 169 を返します。new TextDecoder().decode(bytes) で文字に戻せます。
コマンドライン。 UTF-8 のターミナルで echo -n é | xxd を実行すると、バイト c3a9 が表示されます。ファイル全体を変換するには iconv -f WINDOWS-1252 -t UTF-8 を使います。
関連ツール
16進数のバイトをそのままデコードするには、16進数テキスト変換を使ってください。リンク内のパーセントエンコードされたバイトは、URLデコードで扱えます。ビットまで詳しく見たい場合は、2進数翻訳ツールを試してください。