From: Tanaka Akira Date: 2008-01-28T18:41:58+09:00 Subject: [ruby-dev:33457] Re: enc/euc_kr.c (euckr_mbc_enc_len) euc_kr.c is also used by CP942 In article <479D91BE.9020907@airemix.com>, "NARUSE, Yui" writes: > これは /[\x00-\x7F]|[\xA1-\xFE]{2}/ 以外を蹴るという趣旨なのだと思うので > すが、EUC-KR は CP949 の replica 元でして、その CP949 は \x81\x41 等にも > 文字が振ってあるので困ります。 > http://www.microsoft.com/globaldev/reference/dbcs/949.mspx なるほど。それは考えていませんでした。 ただ、そのへんの文字はもともと一文字として扱えてなかったんじゃ ないでしょうか。 % ./ruby -ve 'p "\x81\x41".force_encoding("CP949").length' ruby 1.9.0 (2008-01-28 revision 15236) [i686-linux] 2 というように、私が手をつける前から、\x81\x41 は 2文字の扱い でした。 また、mbclen だけでなく、CP949 は 2byte 目に ASCII に相当す るバイトがあるので、euckr_left_adjust_char_head も今のままで は期待したようには動かないんじゃないでしょうか。 CP949 の 2バイト文字は [\x81-\xfe][\x41-\x5a\x61-\x7a\x81-\xfe] の領域に割り当てら れているようですが、ここまであからさまに領域が異なるのは別々 に定義すべきなんじゃないかという気がします。 > 個人的には、str.valid_encoding? やその周辺はある程度大雑把にしておいて、 > validation を期待しないでもらった方が望ましいと思っています。(なので、 > valid という名前は適当ではないと思っている) 文字単位に厳密にしようとは思いませんが、マルチバイトエンコー ディングの構造はちゃんと調べる必要があると思っています。そう しないと、壊れている部分を inspect でエスケープすることもで きません。ついでにいえば succ で正しいエンコーディングの文字 を捜し出すこともできません。まぁ、succ はどうでもいいといえ ばいいのですが。 EUC-KR と CP949 を同じにするというのは大雑把にしてもやりすぎ なんじゃないですかねぇ。 -- [田中 哲][たなか あきら][Tanaka Akira]