作者: davi
日時: 2008/6/29(12:01)
藤岡和夫さん ねこ丸さん みなさん  <  こん??は でび です

> >   ただ、なぜこれが必要なのかを説明するためには UTF8 フラグを理解しない
> > といけないわけですが。

初期バージョンの頃のPerl5.8系で、[A-z]ではなく、全角の[A-z]を
指定したりして、困ったことになった経験があります。

そもそも、PerlIOレイヤだけいじっても内部的にはUTF8フラグが付く、
ってのが全く理解不能でした。

また、U+FF00〜定義されている「半角・全角」文字ブロックはUnicode
のBMP領域の中では鬼っ子のような扱いをされていたようで、(今のバー
ジョンはわかりませんが、)当時のPerl5.8ではCJK統合漢字の最後の部分
9FFFまで扱えればいいでしょ、みたいな実装だったのかもしれません。

まぁ、いずれにせよ、この辺りから、Perlはとにかくイヤなの!が
脳内で固定化しちゃったような気がします。

> > 結局日本語周りをまとめた - あーありがち (2007-08-03)
> > http://aligach.net/diary/20070803.html#p02

これ、端的にまとまっているようですね。

ま、いずれにせよ、そろそろ色んな問題点の洗い出しも済んで、実装も
落ち着いてきた頃でしょうから(…と信じたい)、再入門するには
良い頃合いなのかもしれませんね。

−−−−−−−−−−−−−−

>  これまでは、僕はUTF-8フラグを一切立てずにスクリプトを書いてきて、HTML/XML/RDF
> の処理だから問題なかったのですが、でびさんの問題のように本来の日本語の処
> 理をしようとすると、やはりUTF-8フラグを無視できないねと

えーと、「本来の日本語の処理」というのは、ちょっとズレがあるような
気がするので、訂正しておきます。

「もうね、入力も内部処理も出力も、全部UnicodeのUTF-8でいいじゃん。」
と思っています。

今の問題意識は「日本語」というよりも「漢字文化圏の言語処理」の問題
という意識の方が強いです。

もうちょっと汎用化した表現をすれば、

A:文字文化圏毎に必要となる文字種ブロックを選択的に組み合わせて使いたい。
B:各文字種ブロックでの標準的な配列意識を意識した処理をしたい。

になるのかなぁ、と思います。

まず、Aですが、日本人なら「漢字」ブロック+「かな/カナ」ブロック+
「アルファベット」ブロック+「数字」ブロック+…みたいな感じでしょうし、
韓国人なら「かな/カナ」ブロックの代わりに「ハングル」ブロックが必要でしょう。

これは、Unicodeではちゃんと実現できている。

しかし、Bになると、困ったことになっています。

様々な文字種の各ブロックを組み合わせて各言語毎に文章表現が成立して
いるわけですが、Unicodeという規格の性質上、増補作業によって
1つの文字種のブロックが2箇所以上に分かれてしまっている場合がある。

そうすると、特にソーティング処理でとても困る。

その最もわかりやすい部分が漢字文化圏で使用する「漢字」ブロックだ、と。

でび  http://davi.txt-nifty.com/1984/