URLに日本語などが入っている場合、これをコピーすると、日本語部分(正確にはASCIIコード外の文字部分)がエンコードされてクリップボードに入る。これを「URLエンコード」(あるいはURLエンコーディング)あるいは「パーセントエンコード」という。
似たようなものに、HTML内で特殊な文字を表す「文字参照」がある。これは、俗にHTMLエンコードと呼ばれることがある。
○URLエンコード
URLエンコードは、最初RFC 1630 Universal Resource Identifiers in WWWで定義された。その後に登場したURL関連のRFCで定義されてきたが、現在では、WHATWG(Web Hypertext Application Technology Working Group)のURL Standardで定義されている。この文書では、%エンコードを「Percent-encoded bytes」と呼び、1.3. Percent-encoded bytesに記述がある。
このURL StandardではUTF-8を使うことが「義務づけ」られているため、URL全体をバイト列として扱うことができる。なお、シフトJISもEUC-JPもバイト列の文字エンコードなので同様に%エンコーディングが可能である。シフトJISもEUCも推奨はされないが、過去にこの文字エンコードでWebサイトのパスが記述されたことがあり、それらがまだ残っている可能性がある。
パーセントエンコーディングでは、バイトを2桁の16進数表現(0~9、A~Fまたはa~f)として、頭に“%”を付ける。
エンコード方式としては比較的簡単なものだが、元のURL文字列に戻すのは、コードポイントから文字を得るため、手作業ではちょっと難しい。PowerShellを使うと、HttpUtilityクラスが利用でき、そこにあるUrlEncode、UrlDecodeメソッドが使える(写真01)。
○HTMLエンコード
文字参照は、HTMLやXMLの元になったSGML(Standard Generalized Markup Language。
1986年にISO規格化)に起源を持つ。SGMLは、電子的に文書を作成するためのプラットフォーム独立、アプリケーション独立のマークアップ言語である。このSGMLには、「実体」と呼ばれる機能があり、テキストやタグなどに名前を付けて、参照することができた。参照を行う場合には名前を“&”と“;”で挟んで表現した。
HTMLでは、これを簡易化して、「数値文字参照」と「文字実体参照」(合わせて文字参照と呼ぶ)を作った。現在のHTMLの仕様は、WHATWGで管理されており、HTML Standardの13.1.4 Character referencesに定義がある。
「数値文字参照」は、文字コード(コードポイント)を数値表現したもので文字を参照する。このとき、10進数と16進数を使うことができ、10進数の場合、10進数表現したコードポイントを“”と“;”で挟む。16進数のときには、“”と“;”で囲む。
「文字実体参照」は、文字に付けられた名前で文字を参照する。使うことができる名前は、HTMLの仕様で定義されており、すべての文字に名前が付けられているわけではない。
「数値文字参照」は、すべてのコードポイントを表現できるが、そのためには文字とコードポイントの対応を知っている必要がある。
これに対して、文字実体参照では、コードポイントよりはわかりやすく、名前と文字の対応も覚えやすい。ただし、必ずしも利用する文字すべてに名前が付けられているわけではない。現在のHTMLで定義されている文字実体参照で利用できる文字とその名前については、HTML Standard, 13.5 Named character referencesに一覧がある。
なお、HTMLエンコードも前述のHttpUtilityクラスのHtmlEncode、HtmlDecodeメソッドでエンコード、デコードが可能だ(写真02)。
今回のタイトルネタは「フランチェスコの暗号」(新潮文庫。原題 The Rule of Four,2004 I・コールドウェル、D・トマスン)である。ルネッサンス時代の奇書「ヒュプネロトマキア・ポリフィリ」は、最初期の活字印刷物としても有名な実在の書籍。本書は、その謎を解こうとする大学院生とその回りで起きる事件を扱う。前年に刊行されたThe Da Vinci Code(2003、Dan Brown)と比較されることが多いが、ベストセラーになったものの、映画にもならなかったし、作品としてシリーズ化されたわけでもない。とはいえ、謎自体は、こちらのほうが洗練された感じがある。
編集部おすすめ