エンコーディング(エンコーディング)とは | 意味や読み方など丁寧でわかりやすい用語解説
エンコーディング(エンコーディング)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
エンコーディング (エンコーディング)
英語表記
encoding (エンコーディング)
用語解説
エンコーディングとは、データを特定の規則に従って別の形式のデータに変換する処理全般を指す。コンピュータは根本的に0と1の羅列であるバイナリデータしか直接扱うことができない。そのため、人間が日常的に使用する文字、画像、音声といった様々な情報をコンピュータ上で処理、保存、通信するためには、それらをバイナリデータへ変換する手続き、すなわちエンコーディングが不可欠である。この逆の変換、つまりエンコードされたデータを元の形式に戻す処理はデコードと呼ばれる。エンコーディングはITの様々な場面で利用される基盤技術であり、特にシステムエンジニアにとっては正しく理解しておくべき重要な概念である。
最も身近で重要なエンコーディングの一つに、文字エンコーディングがある。これは、文字をコンピュータが扱えるバイト列に変換するための規則である。この理解のためには、まず文字コードとの違いを明確にする必要がある。文字コードとは、個々の文字に対して一意の番号(コードポイント)を割り当てる規格のことである。例えば、世界中の文字を統一的に扱うための規格であるUnicodeでは、「あ」という文字には「U+3042」というコードポイントが割り当てられている。一方、文字エンコーディングは、このコードポイントを具体的なバイト列に変換する方式を指す。同じUnicodeという文字コード体系であっても、それをバイト列に変換するエンコーディング方式にはUTF-8やUTF-16など複数の種類が存在する。
歴史的には、様々な文字エンコーディング方式が作られてきた。初期のコンピュータで標準的に使われたのはASCIIであり、これはアルファベット、数字、一部の記号を7ビット(128文字)で表現するものであった。しかし、ASCIIでは日本語のような多バイトを必要とする言語は表現できない。そこで、日本ではShift_JISやEUC-JPといった独自のエンコーディング方式が考案された。Shift_JISは、1文字を1バイトまたは2バイトで表現する可変長のエンコーディングで、Windows環境で広く使われた。EUC-JPは主にUNIX系のOSで利用された。これらの異なるエンコーディング方式が混在したことで、異なるシステム間でデータをやり取りする際に、文字が正しく表示されない「文字化け」という問題が頻発した。文字化けの主な原因は、あるエンコーディング方式で保存されたテキストデータを、別のエンコーディング方式で読み込もうとすることにある。例えば、Shift_JISで「あ」と書かれたデータをEUC-JPとして解釈しようとすると、バイト列の解釈がずれてしまい、意図しない文字が表示される。この問題を解決するために、現在ではWebを中心にUTF-8が標準的に利用されている。UTF-8はUnicodeをベースとしたエンコーディング方式であり、1文字を1から4バイトの可変長で表現する。ASCIIの文字は1バイトで表現できるため互換性が高く、かつ世界中のほぼ全ての言語を一つの方式で扱えるという利点から、国際的な標準となっている。
エンコーディングの概念は文字だけに留まらない。画像、音声、動画といったマルチメディアデータも、エンコーディングによって扱われている。これらのデータは非圧縮の状態ではファイルサイズが非常に大きくなるため、保存やネットワーク経由での転送を効率化するために圧縮、すなわちエンコードが行われる。例えば、画像フォーマットのJPEG、音声フォーマットのMP3、動画フォーマットのH.264などが代表的なエンコーディング方式である。これらの方式の多くは、人間の知覚能力では認識しにくい情報を一部省略することで、データ量を大幅に削減する非可逆圧縮技術を利用している。
また、Webの世界ではURLエンコーディング(パーセントエンコーディング)も重要である。URLに使用できる文字は、英数字と一部の記号に限定されている。そのため、日本語やスペースといった許容されない文字をURLに含める場合、それらを「%」と16進数を組み合わせた特別な文字列に変換する必要がある。これもまた、データを安全に通信するためのエンコーディングの一種である。さらに、バイナリデータをテキストデータしか扱えない環境で送受信するためのBase64というエンコーディング方式も存在する。これは、バイナリデータを64種類の英数字と記号のみで構成される文字列に変換するもので、電子メールへのファイル添付や、Webページへの画像データの埋め込みなどに利用される。
このように、エンコーディングは、異なる種類のデータを統一的なルールで扱うための翻訳作業であり、コンピュータシステムが円滑に機能するための根幹を支える技術である。システムを開発する上で、どのようなデータがどのようなエンコーディング方式で扱われているかを常に意識することは、予期せぬ不具合を防ぎ、安定したシステムを構築するために極めて重要である。