wwwにおける日本語エンコーディングの変遷
- 公開日: 2022/04/10(日) 23:53[JST]
- 更新日: 2022/05/05(木) 09:41[JST]
主にwwwで使用される日本語のエンコーディングは歴史的な経緯(後述)から互いに互換性の低い複数のものが併存していた。ブログを現行のシステムに移行する際過去の自サイトをWeb Arhiveで調べていたのだが、ある時期ISO-2022-JPでHTMLを記述していたことを思い出した。
確かその時は何か理由があってそうしていた(その時はLinuxを主に使っており、ISO-2022-JPが使えるエディタを他のディストリビューションから拾ってきて使っていた)はず。その理由を自分なりに調べ直してみた次第。
HTML上の制約
WebコンテンツはHTMLで記述される。HTMLは4までSGMLベースであり、SGMLのDTD(SGML文書の設計図みたいなテキスト)に使用可能な文字集合が定義されており、この文字集合に含まれない文字は使えない[1]。HTMLの各バージョンと使用可能な文字集合の対応は以下の通りである。
バージョン |
発表年月 |
文字集合 |
---|---|---|
2.0 [2] |
1995/11 |
ISO-8859-1 |
2.X [3] |
1997/1 |
ISO 10646:1993(Unicode) |
3.2 [4] |
1997/1 |
ISO-8859-1 |
4.0 [5] |
1997/12 |
ISO 10646:1993(Unicode) |
HTML2.0、2.Xはテーブルやフレームの無いシンプルな仕様。表現力に乏しいためNetscape、Microsoftの両社は積極的に拡張を行っていた。3.2はそのブラウザ独自拡張を取り込んだもので、日本国内においてWebが流行り出した1997年時点では概ねHTML3.2相当で記述されていた。しかしながら上記の通り3.2で使用可能な文字集合は西欧の文字集合であるISO-8859-1であるため、日本語は使用できない。つまり当時の日本語のWebページの大半は(私自身の過去のものも含め)規格外のものであったと言える。
日本語でそれなりの表現力を持ったページが、規格上OKとなるのは1997年末に登場したHTML4.0からということになる。
HTTP上の制約
以上のようにHTMLで利用可能な文字集合はHTMLの規格にて規定されている。規定されているのはあくまでも文字集合であるため、HTMLのルール上は、日本語さえ使わなければシフトJISを指定しても構わない(もっとも日本語を使わないシフトJISとはUS ASCIIとほぼ等価である)。wwwで使用されるテキスト(HTML文書のみならず他のテキストドキュメントも含む)のエンコーディングはプロトコルであるHTTPの規格に依存する。
HTTPは1991年に登場した0.9[6]、1996年2月に登場した1.0[7]、1997年1月に登場した1.1 [8]とバージョンアップを重ねており、その度に使用可能なエンコーディングが変化している。
0.9ではRFC 822上位互換(=US ASCII上位互換)であることが規定されているようだ。1.0ではUS ASCII、ISO 8859-1に加え、ISO-2022-JP(及び多国語拡張版であるISO-2022-JP2)、それにUTF-7、UTF-8が利用可能となっている。
1.1ではそれが大きく拡張され、IANAに登録されているエンコーディングが利用可能となっている。IANAの登録は日々更新されているのだが、1994年10月時点[9]ではまだシフトJISもEUC-JPも含まれていない[10]。一方、1998年12月時点では両エンコーディングは登録されている。リンク先の文書ではEUC-JP、Shift_JIS共にUTF-8のすぐ下に記載されており、UTF-8の参考資料が1998年1月発行のRFC 2279であることから、おそらくEUC-JP、Shift_JISが登録されたのは1998年中であろうと思われる。
(2022/3/11追記)
↑のように書いたが、Netscape Navigator3(最初の公式リリースは1996年8月、最終版の3.0.4でも1997年10月)ではShift_JIS、EUC-JPを認識していたという説もあり(少なくとも1997年のNavigator 4では対応している)、もっと前からIANAにShift_JIS、EUC-JPが登録されていた可能性が高い。古いIANAの文書はFTPにしかなかったらしくWeb Archiveでは1998年12月までしか辿れなかった。
(追記終わり)
RFC 2068 (https://datatracker.ietf.org/doc/html/rfc2068)、1999年6月のRFC 2616(https://datatracker.ietf.org/doc/html/rfc2616)にて上書きされる
そのため、当時のブラウザ(Netscape Navigator2等)では、character encoding名をシフトJISについてはx-sjis、EUC-JPについてはx-euc-jpとしていた(x-で始まる名称はそれが規格外のベンダが勝手につけた名称であることを示す)。
ブラウザ上の制約
(2022/4/16追記)
最初期のwwwの歴史については、MOSAICの国際化対応を行ったNTT(当時)の高田敏弘氏のサイトに詳説されている。氏のサイトや他のインターネット上の文書、私が各種ブラウザでテストした結果を以下にまとめる。
1993年8月: tkWWWというtcl/tk[11]で記述されたブラウザが、tcl/tk自体の日本語化によって日本語を扱えるようになった。当初は各種UNIXの標準エンコード[12]のみの対応だったが後に高田氏によってISO-2022-JPに対応したパッチが提供された(参考:NTT時代の高田氏によるweb文書
1993年10月: 富士通の渡辺洋一氏によってMosaic1.2の日本語化が行われた。渡辺氏自身による紹介記事によれば、ISO-2022-JPとEUC-JPに対応。なお、上記のNTT時代の高田氏の文書によれば日本語化によりISO-8859-1のGR領域(US-ASCIIから拡張されたアクセント付き文字などが格納される領域)を表示できないらしい。
1994年前半頃: 高田氏によってMosaic2.0の多言語化がなされる(公式のChangelogだと1992年4月となっているがたぶん1994年の誤記。上記渡辺氏の文書でも言及されているので遅くとも94年8月には公開)。日本語のみならず中国語・韓国語・ヘブライ語などにも対応。日本語の対応エンコーディングはISO-2022-JP及びEUC-JP。
1994年後半: 日本語化したMosaicであるInfomosaicが富士通より発売。SunOS/Solaris版が8月、Windows版が10月、Mac版が12月。上記の渡辺氏の文書では「様々な漢字コード」とわざわざ書かれているのでシフトJISにも対応していたと予想。
1994年末: インターネットマガジン1994年12月号の「[特集] WWW大航海記」によれば、この時点では素のMosaicはOS標準のエンコーディングのみ日本語対応、UNIX版については高田氏のパッチによりISO-2022-JP、シフトJIS、EUC-JP全対応とのことである。AIR Mosaicという日本語対応のPC版ブラウザや、Netscapeで日本語を表示されるためのパッチ「Mosaic Patch'n」も紹介されている。
1995年: Netscape1のどこかのバージョンで日本語対応(ISO-2022-JP、EUC-JP、シフトJIS全て)[13]。遅くとも1.12の段階では対応している。Charsetは無く、日本語を優先表示させる言語として指定されていれば自動的にエンコーディングを判別する仕組み(つまり判別ミスが起きた場合は対応方法がない)。
1995年9月: Netscape2.0でcharsetのサポート開始。この時点ではEUC-JPとシフトJISはIANAに未登録なのでx-sjis、x-euc-jpを使っていた。
1996年8月: Netscape3.0でIANA登録名であるShift_JIS、EUC-JPをcharsetとして使えるようになる。
おそらくは、各プラットフォームでの最初期のブラウザ(UNIX:tkWWW、Mac/Windows:Mosaic)ではOS標準のエンコードのみ日本語を表示できる環境であったことからWebページもそれぞれのエンコーディングで作成することが多くなり、日本語Webページのエンコーディングが3種類バラバラになったのではないか、と予想される。その一方で、perl/CGIによるインタラクティブなページ(掲示板など)を作成する場合はサーバであるLinuxやFreeBSDの標準エンコーディングだったEUC-JPを用いるのが無難な選択であり、作成者の環境がWindowsやMacであってもサイトのエンコーディングをEUC-JPに統一するケースもよく見られるようになった。例えば、商業サイトだがヤフーJapanはかつてはEUC-JPだった。
(追記終わり)
ユニコードは1997〜1998年頃よりブラウザが対応し始めた。とはいえ、Netscape Navigator4等最初期のブラウザでは対応が不十分であった。「Navigator4を切り捨てても構わない」と言える状況になるまではUTF-8でWebページを記述するべきではなかった。
UNIXのX Windows Systemで主に利用されていたGUIツールキット
ほとんどはEUC-JPだったがソニーのNEWS-OSはシフトJISだったようである
少なくとも1.0Nというバージョンでは日本語に全く対応していなかった(テストしてみたがフォントをOsakaに設定してもシフトJISすら表示できなかった)。
まとめ
WebサーバがHTTP1.0である場合はISO-2022-JPかユニコード
WebサーバがHTTP1.1である場合、1998年中のどこかのタイミングでシフトJIS、EUC-JPが規格上使用可能となる
2004年あたりまではUTF-8でWebページを記述することは好ましいことではなかった
以上をまとめると、正しいHTMLで記述しようとするならば、UTF-8で問題ないという状況になるまでは、消去法でISO-2022-JPとするのが無難