文字コードが多すぎる理由
ASCIIからShift_JIS、Unicode、UTF-8まで。なぜ文字コードはこれほど乱立し、いまだに文字化けが起きるのか。その歴史をたどる。
はじめに
「アスキーアート」という言葉を聞いたことがないだろうか。
「ASCII」という文字コードのみで描かれた絵のことだ。
ここで例を出すとかなり騒がしい記事になってしまうので出さないが、おそらくほとんどの人は聞いたことがあるであろう。
では、その「ASCII」について知っている人はどれくらいいるのだろうか。
「ASCII」とは数ある 文字コード の一つである。
今回は、そんな文字コードの歴史について解説していこうと思う。
文字コードとは?
文字コードとは、PCやスマホなどのデジタルデバイスで文字を表すためのコードである。
例えば、「Unicode」という文字コードで「あ」を表すコードは"3042"である。
同じ文字であっても、文字コードによってコードは全く異なる。Shift_JISでは"0x82 0xA0"であり、UTF-16では"0x3042"である。
文字コードのスタンダードである「ASCII」とは?
ASCII(American Standard Code for Information Interchange)は世界で初めて文字を体系的に数字で表したコードである。
ASCII以前の文字コードは、各メーカーのハードウェアの都合に合わせて場当たり的に作られていた。しかし、ASCIIは「コンピュータや通信で効率よく文字を処理するためには、どう数値を割り振るべきか」を初めて体系的にデザインした。
1963年に誕生して以来、文字コードの基準として君臨した。
「ASCII」がいまだに文字コードの基準になっている理由は別途記事で書いている途中なのでまた今度公開したい。
要するに
ASCIIは、文字コードの歴史において「最初の標準であり、かつ現在も使われ続けている現役の標準」である。
Shift_JISもUTF-8も、すべては「ASCIIという強固な土台(前半128文字)の上に、いかにして自分の国の文字を付け足すか」という拡張の歴史でしかない。そういった意味で、ASCIIはコンピュータの世界における「不変の共通言語」という位置づけになる。
文字コード多すぎ問題
2026年6月現在、数百種類存在しているとされ、インターネットの標準化団体(IANA)に登録されている文字コードが約250種類存在する。
有名な文字コードを挙げてみると、
- UTF-8:現在(2026年)のWeb上の世界シェア率98%以上を占める
- UTF-16:Windowsの内部処理やJava、JavaScriptなどで使われている
- ASCII:すべての基本となるコード。1960年代に生まれたアメリカ製の英数字専用コード
- Shift_JIS:かつての日本語WindowsやMac、ガラケーで大活躍した文字コード
- EUC-JP:主にUnix/Linux系のサーバー環境で長年使われてきた文字コード
- ISO-2022-JP:インターネット黎明期に「電子メール」で確実に日本語を送るために使用されていた
- ISO-8859-1(Latin-1):英語に加え、フランス語やドイツ語などの西欧言語をカバーしている
といった大量の文字コードが挙げられる。
他にも、各国で独自の有名文字コードが存在したり、レトロゲームなどはゲームごとに独自の文字コードが設定されていたりする。
UTF-8という世界標準が制定されてもなお、いまだに混沌を極めているのだ。
文字コードがたくさんある理由
どうして文字コードはここまでたくさん存在するのだろうか。それには複数の理由が絡み合っており、今なお文字コードが統一されていない背景が見えてくるだろう。
1. 技術革新があまりに早すぎた
国際標準を作るには、何年もかけて各国の合意を取る必要があるが、技術の進歩が早すぎてそれどころではなかった。
IBMやMicrosoft、Appleなどの米大手企業や、日本や各国のPCメーカーは、「今すぐ製品を出して市場を取りたい」というスピード感で動いたのである。
結果として、国際標準を待たずに各社が自分たちの"基準"を乱立してしまった。
2. 言語の壁とハードウェアの限界
欧米の言語(英語、フランス語、ドイツ語など)は、ASCII(128文字)に少しのアクセント記号を足せば、1バイト(256文字)の中に収まった。
そのため、ヨーロッパの各国や企業は「自分たちの言語が一番効率よく収まる1バイトの文字コード」を独自に定義した。ISO/IEC 8859シリーズなどがそれである。
また、日本、中国、韓国のように「数千〜数万の漢字」を使う国は、そもそも1バイトに文字が収まらなかった。
よって、必然的に2バイト(65,536文字)を使う必要があり、欧米中心に作られたコンピュータの仕組みの上に、どうにかして「2バイトの漢字」を割り込ませる必要があった。ここで、各社が独自の「割り込ませ方」を発明したため、Shift_JIS、EUC-JP、JISコードなどが乱立してしまった。
bit(ビット)やByte(バイト)についての詳細は以下の記事参照↓
bitとは? 4bit/8bit/16bit/32bit/64bitの違いをわかりやすく解説
3. 過去の遺産
世界共通の文字集合であるUnicodeが登場したのは90年代初頭のことであるが、当時はまだまだ文字コードの移行が進んでいなかった。各国のソフトウェアはいまだかつての標準が使用され、UTF-8がWeb上で最も使われている文字コードとしての地位を確立したのは2008年ごろの話である。少なくとも2000年代初頭までに書かれたインターネット上のテキストには、それ以前の文字コードのものが大量に存在してしまっている。
VScodeや最近のテキストエディターなどでは文字コードを自動で変換することのできる拡張機能などが存在するが、多少手間である。
4. UTF-8とUTF-16問題
UTF-8とUTF-16がある。ここで既に紛らわしい。
また、Macは文字コードとしてUTF-8を採用している。
一方Windowsは文字コードとしてUTF-16を採用している。
そもそもPCの2大OSが別々の文字コードを採用している。 そのため、 Mac ・ Windows間のファイル共有で文字化けが発生してしまったり、実害はしっかり出ているのだが、今更統一できなくなってしまったのである。
これもまた記事にして公開する予定である。
国際標準統一戦争と文字コードの統一
規格統一戦争 ~Unicode vs ISO/IEC 10646~
80年代末から90年代初頭は、世は文字コードが乱立し、混乱を極めていた時代であった。 当時の人々は頻繁な文字化けに悩まされ、その状況を打破すべく、文字の割り当て番号という規格統一に名乗りを上げた2つの勢力が立ち上がった。
Unicode陣営
「すべての文字を16ビット(2バイト=65,536文字)の中に収めてしまおう。」
ゼロックス、Apple、Microsoftなどのアメリカのテック企業が主導となってUnicodeを推進した。
ISO/IEC 10646陣営
「2バイトに世界中の文字を収めるのは不可能である。もっと大容量の規格『ISO/IEC 10646』を作ろう。」
国際標準化機構(ISO)が主導となってISO/IEC 10646を推進した。当初は4バイト級の巨大な空間を想定していた。
勝者はUnicode
OSやソフトウェアを今すぐ売りたい企業連合(Unicode側)のロビー活動や開発スピードが勝り、最終的に両者は文字の並び順(規格)を統合することで合意となった。世界に2つの文字コード規格が並び立つ事態を避けたのである。
しかし、この勝利の直後、「やっぱり16ビットじゃ全然足りない」という大問題が発生してしまう。
Unicodeの失敗 ~CJK統合漢字~
Unicodeは16ビットに世界中の文字を収めるため、漢字の数を大幅に削ろうとした。 そこで「中国(C)、日本(J)、韓国(K)の漢字で、意味や形が似ているものは、同じ文字(同じコード)として扱ってまとめちゃおう!」という暴挙に出る。これによってまとめられた漢字をCJK統合漢字という。
当然、日本・中国といったアジア各国から猛烈な抗議を受けることとなった。同じ漢字でも国ごとに字形が違うものは多く、その違いは単なる字体の差ではなく、言語的・文化的に意味のある区別だったからだ。
激しい技術論争の末、Unicode側は領域を拡張する仕組み(サロゲートペアなど)を導入し、対応文字数を約111万文字(正確には1,114,112のコードポイント)まで拡大した。これにより、16ビットの枠を超えた領域に膨大な漢字や記号を収められるようになった。
エンコーディング戦争 ~UTF-8と終戦~
規格はUnicodeに決まったが、今度はそれを「コンピュータのデータ(バイト列)としてどう表現するか」というエンコーディングの戦争が始まった。
UTF-16の登場と問題点
当初、MicrosoftなどはUnicodeをそのまま16ビット(2バイト固定)で扱う「UTF-16」という方式をWindowsなどの内部処理に採用していたが、以下の問題点が発生していた。
- 英語圏のデータ量が2倍になる
- 今まで1バイト(ASCII)で済んでいた英語のテキストが、すべて2バイト使うこととなり、ファイルサイズが倍になってしまった
- 過去のプログラムが全滅する
- 16ビットのデータには、C言語などで「文字列の終わり」を意味する 0x00(ヌル文字) がデータの途中に含まれてしまうため、古いプログラムが誤作動を起こしてしまった
UTF-8の登場
UTF-16の問題点を解決し、統一戦争に完全な終止符を打ったのがUTF-8という、現在(2026年)世界シェア率98%以上の世界統一規格である。
UTF-8はUnixの生みの親であるケン・トンプソンとロブ・パイクが1992年に開発した、UTF-16の問題点を解消するために誕生した文字コードであり、「可変長(1〜4バイト)」という設計をしている。
特に、ASCIIとの完全な互換性と多言語対応が特筆すべき利点である。
- ASCII(英語)は1バイトのままでエンコードできる
- 過去の膨大な資産(プログラム、Webサーバーなど)がそのままで動いてくれる
- 多言語(日本語など)は2〜4バイトでエンコードする
- 必要なときだけバイト数を増やすことにし、日本語などの多言語に対応した
結果として、Unicodeという統一規格と、UTF-8というエンコード方法が確立したことにより、現代のWeb上の文字コードのシェアはUTF-8が98%以上を占めるようになり、国際標準統一戦争は終結した。
現代では、この統一された巨大なUnicodeの空きスペースを使って、世界共通の文化となった絵文字が毎年のように追加され、世界中で文字化けせずにやり取りできるようになっている。
おわりに
現在のファイルはほとんどがUTF-8となっているため、世界各国のファイルを文字化けせずに見ることが出来る。
しかし、古いファイルやWebサイトなどは、Shift_JISなどの、かつて使用されていた文字コードが使用されていることも多く、よく文字化けを起こしてしまう。
ファイルに関しては、現代のテキストエディタの高性能化により、拡張機能などを用いて文字コードを自動で変換してくれることも多くなった。
しかし、Webサイトにおいては、文字化けにより復元不可能な事態に陥ってしまうことも多い。このような事態に頭を悩ませてしまうこともあるかもしれない。時には怒りを感じてしまうこともあるかもしれない。
それでも、これは技術の進歩の証であり、手探りで各々の最適を探り続けた当時の人々の軌跡であると思うと、尊敬の念が生じてくる人もいるだろう。むしろ、Unicodeという統一された規格があり、UTF-8という文字コードによって現代が快適な世界へと移り変わったことに感謝すべきなのかもしれない。