Entry

今読んでいる本 - 『プログラマのための文字コード技術入門』

2010年03月08日

最近の文字コードめぐる状況について,まとまったもんが欲しかったので読んでいます。なお,ここでは符号化方式のことを文字コードと呼ぶことにします。

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)
矢野 啓介
技術評論社
売り上げランキング: 269

多バイトコード圏(という言い方も今風ではないが)に暮らしている人にとって,文字コードの話は,プログラミングする上で避けて通れない問題だったりするわけですけれど,その割に,日本語(をはじめとした東アジア文化圏)の文字コードについて実装の側面からまとめている書籍は,あまりなかったりします。ここでは「実装の側面から」というのが重要。これまで,ちゃんと参照できる実装本といったら,『CJKV日中韓越情報処理』くらいしかなかったんじゃないかと思います。しかし,これは高いし重い。

CJKV日中韓越情報処理
CJKV日中韓越情報処理
posted with amazlet at 10.03.07
ケン ランディ
オライリージャパン
売り上げランキング: 294528
おすすめ度の平均: 4.5
5 日本語情報処理の続刊
4 分厚い。

文字コードというと,政治的/文化的にウェットな議論があって,それはそれで議論する意味があるんだとは思います。しかし,こゆもんは,プログラミングする上で実は「どうでもいいこと」だったりする。森鴎外の「鴎」が文化的に「鷗」かどうかなんて話は知ったこっちゃない。プログラミングにおいては,文字コードの変換にしてもソートの基準にしても,「鴎」という文字が「鴎」として取り扱われることが,まず問題になるわけで,その上位プロトコルである文化的な側面なんつのは二の次です。

ましてや,(旧)文部省の云々が,とか Unicode コンソーシアムの横暴が云々とかいった話なんかは,他でやってください,といった感じ。

ところが,こうした政治的/文化的な話は,実装技術について暗い人間でも気軽に話題にできるためか,非常に多い。繰り返すけれども,あたしゃこうした本をいらないと言っているわけではありません。印刷業界や出版業界なんかでは重宝されるんだと思います。あくまでも,プログラミングの役に立たないというだけ。

で,本書なんですけれど,本書は比較的実装寄りに文字コードを説明した書籍です。「プログラマのための」と銘打っているだけあって,プログラマなら踏まえていなくちゃいけない,文字コードの話をほぼ網羅している。

もっとも,プログラマにとって具体的にどんな文字コードの知識が必要なのかというと,手がけているプロジェクトによって大きく異なるんだと思います。例えば,ウェブアプリを作っているような人からすると,規約を前提とした文字化けのメカニズムや使用言語の対応状況といった(割と浅い)知識で足りるはず。専門にしている向きは少ないかもしれないけれども,セキュリティ周りで文字コードを気にする向きも,文字コード規約の概要を踏まえていれば対応できるはず。そうした方には,必要かつ十分な内容だと思います。

特に,JIS2004(JIS X 0213:2004)とそれに対応する Unicode の話を扱っている点は,本書の特徴として挙げられます。近頃は,MS-Office も JIS2004 が標準の文字セットになっていたりするもんで,それらを扱うプログラムを作る場合は,今後まず必須の知識になるはずです。

一方,そうした「文字コードを扱う製品の利用側」ではなく,「文字コードを扱う製品そのもの」を作っている向きからすると,少し記述は足りません。「文字コードを扱う製品そのもの」というのは,例えば文字コードの変換ライブラリそのものとか,エディタや帳票出力のアプリケーションとかいったもの。文字コード変換における典型的な問題については,さらっと触れられているけれども,具体的な実装については記述がありません。

例えば,本書は文字コードの本なので,直接的に問題にはならないんでしょうけれど,ある文字コードに対応するフォント(ファイル)の構造なんかは,帳票を出力する場合必須になったりします。しかし,そゆもんの話はありません。本書では,文字コードの応用事例として,MIME エンコーディングなんかを扱っているんですけれど,これを扱うくらいならフォントの扱いについて(せめて各 OS なりウィンドウ環境なりが用意している API の紹介だけでも)触れてくれてもよかったんじゃないかと思います。

また,本書ではプログラミングにおける文字コードの扱いとして,Java と Ruby を取り上げています。ま,ここら辺の言語はよく使われているので,扱うのももっともだと思います。しかし,反面,こうした高級言語は,パッケージの内部である程度対応が行われているわけで,あえて書かなきゃいけないほどの話だったかというと,ちと疑問です。

自分の話に引き付けすぎて本書を評価するのもアレなんですけれど,例えば,C++ なんかでマルチバイト文字から Unicode に変換するクラスを書いていたりすると,(IA な環境では)BOM を考慮してバイト順をひっくり返しながらファイルを読まなきゃいけなかったりします。どんだけ低レベルの実装をしてるんだってのもあるんですが。で,ともかくこゆ処理を何も知らずに真正面から実装すると,非常にパフォーマンスの悪いモノができちゃったりする。この点,最近の Windows 開発環境では _byteswap_ulong みたいなアセンブリレベルで実装されたマクロが用意されていたりします。バイト順を入れ替えるのに,自前で論理演算を作るようなことはしないで,普通は CPU のインストラクションを直接呼びます。しかし,こゆ知識は,ちゃんと調べようと思わないと知ることができません。文字コード周りの処理は,ライブラリを作るにしてもものすごく低階層で行われる処理で,何度も呼ばれる基本的な処理だったりします。したがって,ここら辺の処理の出来が,最終的に製品そのもののボトルネックになることもあったりするわけ。

このほかにも,文字コード周りの処理については,変換テーブルの構成方法のような具体的な実装におけるノウハウが満載なわけですけれど,ここら辺は,各メーカーの企業秘密的な位置づけになっているような気もします。

本書の価格と分量で,そこまで踏まえるのはそもそも無理ってもんなんでしょうけど,文字コードにまつわる「処理」は,文化的側面と同じくらい考えるところがあったりします。そゆとこの一端を垣間見ることができたら,それだけでもスゲーとなるわけだけれども,そゆ本はまだ今のところお目にかかってはいません。多分,そゆ本は今後も出ないとは思うんですが。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN