作者: kbk
日時: 2007/1/14(17:06)
Bruce.です。

On Sun Jan 14 14:44:01 JST 2007
藤岡和夫 <kazuf@...> wrote:

> > ちょっと神経質かもしれませんが、utf-8としてvaildなものかどうか
> > チェックしておいても良いかもしれません。先に書いたようにutf-8は
> > lead-byte と trail-byte で明確に異なるビットパターンを持ちます
> > ので、vaild かどうかのチェックはしやすいと思います。
> 
>  コメントありがとうございます。utf-8としてvalidなものでない場合というの
> はどういう場合を指しているのでしょうか。
> 
>  文字コード変換はモジュールにお任せなのであまりわかっていません^^;)

まあPerlでモジュールに任せているのなら多分大丈夫だとは思いますが。

utf-8の場合、lead-byte は 11xx_xxxx のように最上位2ビットが必ず
ONになり、trail-byte は 10xx_xxxx のように最上位ビットがONで
そのすぐ下のビットは必ずOFFになります。ですから、0xff 0xff
なんてパターンはutf-8としておかしいということになります。

また、utf-8における冗長表現というのがありまして、utf-8→utf-16
なんかの変換をするときに、 0x00 → 0x0000 は当然ですが、
0xC0 0x80 もまた 0x0000に変換することが可能です。
まあ後者のパターン(ほかにもあります)はRFCで禁止されていたり
するのですが、複合技でシステムをのっとるようなプログラムの
一部になりえます。いわゆるCrackerはRFCなんかお構いなしにそういうのを
やってくださりやがりますので、気をつけないといけないのですよ。
#詳しくは書けませんが最近した仕事でそういうチェックをする羽目に
#なったのですよ

藤岡さんの前のメールで、ほかに判定できなければutf-8とする、という
ようなことが書かれていたので、ちょっと気になったわけです。

-- 
木村浩一
 I thought what I'd do was, I'd pretend I was one of those deaf-mutes or
should I?
 mail kbk at kt.rim.or.jp
 web  www.kt.rim.or.jp/~kbk/zakkicho/