てきとうなメモ

本の感想とか技術メモとか

いま日本語が危ない

いま日本語が危ない―文字コードの誤った国際化

いま日本語が危ない―文字コードの誤った国際化

文字コード関係の勉強をしていてちょっとUnicode批判がどんなのだったのかなというの知りたくて読んでみた。1997年出版の本なのでいろいろ情報が古いけど。

Unicode批判に関しては理解はできるのだけども、批判している内容におけるデメリットが小さいし、代替となる文字コードも存在しないのでUnicodeを否定するまではいかないかなぐらいだった。でも、書字方向の話は自分があまり知らなかったので勉強になった。

Unicodeを作った理由は、ソフトウェアの各国版を作るとき文字列処理をそれぞれつくり直すのではなく、統一された1つの文字コードを利用した方が楽だよねという話だったはず。そういった意味ではUnicodeはその目的によくマッチした符号化文字集合だと思う。そういったメリット面を崩すだけのデメリットはいまのところ見当たらないしUnicodeに替わるものもないしね

そういう批判は著者も意識していて、著者はどういった文字コードならいいのかというのを書いている。著者の理想の文字コードは、内部コードとしてはできるだけ文字を包摂しないようにした32bit(うち2bitは書字方向(縦横))であり、外部コードはISO-2022-INT-*ということのようである。

内部コードはまあ、ありといえばありなのかな。縦書きの書字方向はどれだけ需要があるのかはよくわからないけど。それに包摂はちゃんとした方がいいと思うけどね。文字を追加するのは簡単だけどもメンテが大変になるわけだし。

外部コードのISO-2022-INT-*はやっぱり状態を持つのがどうしても問題だと思うんだけども。ファイルは最初から最後までずっとシーケンシャルに読むとは限らないのでいろいろ処理が面倒なんじゃないかな。あと、他国の言語と交ぜ書きすることってほとんど無いと思うのでオーバースペックだと思う。

著者のUnicodeに対する批判はこんな感じ。自分の考えも一緒に書いておく。

16bitでは文字数が足りない

現状ではサロゲートペアがあるからなあ。Unicode2.0が1996年なのでサロゲートペアの話も出ていたのではないかと思うのだけど。

日中韓漢字統合するな

これに関しては自分はどっちでもいいかなあ。そもそも一般ユーザが日中韓の文字を1つの文書に混ぜて使うことはほとんどないので区別する必要性はあまり高くないと思う。必要な場合は上のレベル(HTMLとかリッチテキストとか)で表現すれば良いし。あと困る例として、韓国に出張したときに韓国のPCでメールを読もうとすると韓国漢字が表示されるというものがあったけども、フォントインストールすればいい話だよな。スクリプト情報が指定してあってもフォントがなければ表示しようがないのだから。

文字合成がややこしい

Unicodeは結合文字を多用しているので確かにこれはあたっているかな。各国の文字コードとの互換性の問題があるのでしょうがない部分もあると思うけど。あと、「結合図形記号を作る規則はUnicode規格の範囲ではない」から「a+¨」が「ö」になるかもしれないというのは乱暴すぎる

Unicodeは固定長ではない

まあ、サロゲートペアや結合文字を考えるとその通りなんだけども、後者は他の文字コードでもタイ文字とかを含めようとすると避けようがないと思う。UTF-8は可変長→Unicodeは固定長でないとするのは難癖かな。内部コードで固定長で扱いたいならばUTF-16にすれば良いし。

Unicodeは状態を持つよ

文字合成が存在するので前後の情報が必要
可変長の符号化方式だと何文字目という情報をもつ

このレベルのものだとshift_jiseuc-jpも持っているよなあ。著者もこの状態が短期的なものであることは認めているけど。

言語情報をもって言語の切替を行なおうとすると状態を持つことになる

言語情報は上のレベルで扱えば良いと思う。

書字方向を扱うから状態を持つ

書字方向は入れ子があり、入れ子を扱おうとすると当然状態を持ってしまう。Unicodeは入れ子にある程度の深さまで対応しているらしい。著者は入れ子を扱わないレベルでサポートすべきだという立場のようだけども、実際の書字方向のある文字でどの程度入れ子が利用されているかによってどうすべきかが決まると思う。

Unicodeが世界中の文字を扱えるということに関して

ISO-2022でもできるよ

ISO-2022のメリットが示されていないと弱いと思う。

文字合成がうまくできていない

アラビア、タイ、インドなどの文字に対して適切に処理できている実装ってあるんだろうか

部分実装でもよいことになっているから、Unicodeを実装したといっても一部しか実装していない場合がある

これは何の反論にもなっていないような。