文字エンコーディングを理解する:ASCII、Unicode、そしてUTF-8
テキストファイルを開いて、éのような奇妙な文字や記号がたくさん表示されたことはありませんか?
これはMojibake(文字化け)と呼ばれ、コンピュータがどの「文字エンコーディング」を使用すべきか混乱しているときに発生します。
しかし、文字エンコーディングとは正確には何でしょうか?コンピュータがテキストを扱う基本原理を見てみましょう。
1. コンピュータは数字しか知らない
最も低いレベルでは、コンピュータは0と1、つまり2進数しか理解しません。
テキストを保存するには、各文字に数字を割り当てる地図が必要です。
A->65B->66!->33
このマッピングシステムを**文字セット(Character Set)**と呼びます。
2. ASCII:アメリカの標準(1963年)
最も広く使用された最初の標準は**ASCII(American Standard Code for Information Interchange)**でした。
7ビットを使用して128文字を表現しました:
- 英字(A-Z、a-z)
- 数字(0-9)
- 基本的な句読点
- 制御コード(改行、タブ)
英語圏のユーザーにとっては素晴らしいものでした。しかし、世界の他の地域はどうでしょうか?
ASCIIにはアクセント(é、ñ)はおろか、漢字や絵文字を表現する方法がありませんでした。
3. 「拡張ASCII」の混乱
他の言語をサポートするために、各地域でASCIIを8ビットに拡張した独自の規格を作成しました。
- ISO-8859-1 (Latin-1): 西ヨーロッパのアクセントを追加。
- Windows-1252: Latin-1に似ているが、いくつかの違いがある。
- Shift_JIS: 日本語用。
- EUC-KR: 韓国語用。
問題点:
Shift_JISで保存されたファイルをISO-8859-1で開くと、ゴミのように見えます。すべてをカバーする単一の標準はありませんでした。
4. Unicode:すべてを統べる一つの指輪
この混乱を解決するためにUnicodeが誕生しました。その目標は、世界のすべての言語のすべての文字に固有の番号(Code Point)を割り当てることです。
A->U+0041é->U+00E9한->U+D55C💩->U+1F4A9
Unicodeは現在、149,000文字以上を定義しています。
しかし、Unicodeは数字のリストにすぎません。その数字をバイトとしてどのように保存するかは教えてくれません。そこでエンコーディングが登場します。
5. UTF-8:画期的な解決策
「すべての文字に単に32ビット(4バイト)を使えばいいのでは?」(これはUTF-32が行うことです)と思うかもしれません。
しかし、そうすると8ビットしか必要としない英語テキストのファイルサイズが4倍になってしまいます。
そこで**UTF-8(Unicode Transformation Format - 8-bit)**の登場です。
これは可変長エンコーディングです:
- 標準ASCII文字は1バイトを使用します。(ASCIIと後方互換性あり!)
- ヨーロッパの文字は2バイトを使用します。
- アジアの文字(CJK)は3バイトを使用します。
- 絵文字は4バイトを使用します。
仕組み
- バイトが
0で始まれば:1バイトのASCII文字です。 110で始まれば:2バイトシーケンスの開始です。1110で始まれば:3バイトシーケンスの開始です。
この素晴らしい設計のおかげで、UTF-8は英語に対して効率的でありながら(ASCIIと同じサイズ)、世界中のすべての文字をサポートすることができます。
結論
今日、UTF-8は支配的な標準であり、Webサイトの98%以上が使用しています。
ファイルを保存するときは、常にUTF-8(BOMなし)を選択してください。そうすれば、いつでもどこでも、どのデバイスでも、あなたのテキストを読むことができます。
Pro Tip:
éの代わりにéが表示される場合、通常はUTF-8ファイルがWindows-1252として誤って読み取られていることを意味します。``のようなものが表示される場合、バイナリファイルや互換性のないエンコーディングがテキストとして読み取られていることを意味することがよくあります。
関連ツールを見る
Pockitの無料開発者ツールを試してみましょう