Kimura Fuyuki
fuyuk****@hadal*****
2002年 11月 16日 (土) 20:21:14 JST
At Fri, 15 Nov 2002 23:27:17 -1000 (HST), Shiro Kawai <shiro****@lava*****> wrote: > > 不完全な文字列に対する見方が二通りあって、まだ確定していません。 むむ、そうでしたか。(どうりでよくわからないと思った ;) > 当初は、文字通り「完全ではない」とする見方をしていました。 > 例えば「ほとんど正規のマルチバイト文字列だが一箇所だけおかしな > バイト列が紛れている」というような場合でも、残りの部分はできる > だけ正規の文字列として解釈してあげたいなと。 > > ただ、次第に実装を進めて行くうちに、不完全な文字列の「正しい > 解釈」を決めるのが不可能に思えて来たので、いっそのこと不完全な > 文字列を「バイトストリング」と改名してしまおうか…とも考えて > います。正規のマルチバイト文字列にならなければあくまでただの > バイトアレイとして扱うと。 私は基本的に後者のつもりで理解していました。つまり、 complete string == character stream incomplete string == byte stream (1バイト文字しか扱わない処理系の文字列) しかしどうも前者のような挙動をしてくれる箇所があるので、こりゃなんでか なと。不完全な文字列でも内部的に勝手にコード変換したりしてくれそうな気 がしてちょっと使うのが怖かったです。まあ md5 を書いて大丈夫そうなのは わかりましたが。 個人的にはバイトストリング案に賛成ですが、実際問題ゴミコード混じりのメー ルなんかが山ほど来ることを考えると、なかなかそう単純化するわけにはいか ないもしれません。 ゴミが見つかったときに a. すぐにあきらめてバイトストリングにするモード b. 不完全な文字列(正規文字とゴミが混在)にするモード c. 無理矢理完全な文字列にする(内部コーディングに正規化)モード の三つを用意しておいて、aの後処理のために正規文字列になる部分とゴミ部 分を切り分けて返す関数を提供するとか…めんどうですね、やっぱり。 ここはほかの実装を参考にする手でしょうか。muleとかrubyとか。 -- 木村 冬樹