しろもじメモランダム

文字についてあれこれと。

『[改訂新版] プログラマのための文字コード技術入門』を読んだ

年末に発売されていたので読みました。

[改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ)

[改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ)

どんな感じの本だかざくっと

タイトルに「プログラマのための」あるように、プログラミング経験者がターゲットになっています。ビット・バイト、2進数・16進数、ファイル、プロトコルのような「常識」についてはさらっとした説明で済まされているので、その分、文字コードの本質的な部分・実践的な部分の密度が高くなっています。文章が平易なので、読み進めやすいかと思います。

さらに内容をはっきりさせるのであれば、『「現代日本プログラマのための」文字コード技術入門』といったところでしょうか。この本は、日本で現在使われている文字コードの話が中心です。世界各地の文字コードだったり、歴史的な文字の符号化などにもおもしろい話はたくさんあるのですが、そこには深入りせず、実用的なテーマに絞って解説されています。国内での業務にすぐ役立ちそうな内容です。

第7章「プログラミング言語文字コード」では JavaRuby が題材になっていますが、他の言語でも基本的な概念は共通しています。それ以外の章では JavaRuby の知識はまったく要求されませんので、馴染みがなくても大丈夫です。その前の第6章が Web の話だということもあり、個人的には JavaScript も取り上げてほしいところですが。

初版との比較

この本(改訂新版)は第2版にあたります。初版は2010年2月に発行されています。

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

初版と改訂新版、左右に並べて目で diff をとりながら読みました。Unicode をはじめ、各規格・ツールの更新に合わせた細かな対応がなされていますが、こうして見比べてみると、文字コードの本質的な部分についてはほとんど変わらないことが分かります。Unicode 絵文字(2010年〜)についての記述も増えていますが、ここ数年の世界的な普及を見ると、第3版ではもっともっとページ数が割かれるもしれません(笑)

この期間における最大の変化は、UTF-8 の圧倒的な普及でしょうか。初版では、著者の「JIS X 0213 推し」な雰囲気が端々から伝わってきましたが、UTF-8 の普及がそれを取り込む・呑み込むかたちになりました。Web ブラウジングで文字化けに遭遇するようなこともめっきり減り、たまに出会うと懐かしさすら感じます。Shift_JISEUC-JP や ISO-2022-JP を知らずに、UTF-8 一本で暮らしていける世代がすでに出てきているはずです。「レガシー」文字コードから解放される一方で、Unicode の孕んだ複雑さと向き合う場面が増えそうですが……

ただし、「UTF-8 の圧倒的な普及」という印象は、自分が仕事で新しめの Web アプリケーションを触っているから、というのもあるかもしれません。大企業や役所の業務システムはいまどんな感じなんでしょうか。

メモと補足

p. 9 図 1.2

亜 哀 愛 悪 握 圧 扱 安 … 惑 枠 湾 腕

となっていますが、これは「旧」常用漢字の先頭部分と末尾部分ですね。2010年の常用漢字改定によって、「亜 哀 悪 握 圧 … 惑 枠 湾 腕」という並びになりました。

p. 193

IANA の登録簿には、……実際に使われている JIS X 0213 の符号化方式が登録されていないという問題もあります。

登録されていなかったんですね、知りませんでした。

https://www.iana.org/assignments/character-sets/character-sets.xhtml

需要がなかったのでしょうか……;;

p. 206

HTML のDTD において、「copy という名前は © を表す」という定義がなされているため、……

このあたりは HTML 4.01 の話です。HTML5DTD は存在しません。

p. 208

Shift_JIS を用いる場合はリスト 6.1 の例の「UTF-8」の部分を「Shift_JIS」に、EUC-JP の場合は「EUC-JP」にします。

HTML の <meta charset="hogehoge"> を説明している箇所です。ただし、この本が参照している HTML 5.2 には

Authors should use UTF-8. Conformance checkers may advise authors against using legacy encodings.

という説明があり、「UTF-8 を使用すべき」となっています。一方、HTML Living Standard ではさらに進んで

The Encoding standard requires use of the UTF-8 character encoding and requires use of the "utf-8" encoding label to identify it. Those requirements necessitate that the document's character encoding declaration, if it exists, specifies an encoding label using an ASCII case-insensitive match for "utf-8". Regardless of whether a character encoding declaration is present or not, the actual character encoding used to encode the document must be UTF-8.

という記述になっており、「UTF-8 を使用しなければならない」ことになりました。

p. 216

URL の中に、予約されている記号や、ASCII で表現できない文字を書きたいときには、URL 符号化という方法が使われます。

この本では触れられていませんが、ドメイン名部分は Punycode によって符号化されます。例えば、https://日本語.jphttps://xn--wgv71a119e.jp になります。

p. 222

クライアントからの送信に使われる文字コードは、HTML の form 要素の accept-charset 属性で明示的に指定することもできます。accept-charset="Shift_JIS" と指定すれば Shift_JIS で送信するということです。

HTML 5.2 では

[...] each token must be an ASCII case-insensitive match for one of the labels of an ASCII-compatible encoding.

となっています。一方、HTML Living Standard では

If specified, the value must be an ASCII case-insensitive match for "UTF-8".

と規定されており、こちらも UTF-8 固定になりました。

p. 226

最後に、これからの日本語メールの符号化がどうあるべきかを考察しました。

初版の名残です。初版では今後についての考察があったのですが、UTF-8 の普及により、改訂新版ではこれが削除されています。

p. 293 表 8.1

表のタイトルが「ベンダー依存の変換の問題の発生する代表的な文字」になっていますが、おそらく表 8.2からの編集ミスです。


[改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ)

[改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ)