From: WATANABE Hirofumi Date: 1998-06-09T16:15:36+09:00 Subject: [ruby-dev:2818] Re: Kconv.guess わたなべです. Yukihiro Matsumoto writes: :以下のパッチはどうでしょう.問題の文字列(なにをやってたか推 :測できそう…^^;;;)はunknownと判定されます. いわゆる半角カナのために unknown になるのは悲しいので jless のアルゴリズムを入れてみました. EUC のひらがならしき文字が 3 つ以上連続していれば EUC と判断します. --- kconv.c.matz Tue Jun 9 15:24:23 1998 +++ kconv.c Tue Jun 9 16:04:07 1998 @@ -1895,4 +1895,18 @@ unsigned char *pend = p + RSTRING(src)->len; + int sequence_counter = 0; -#define INCR {p++;if (p==pend) return INT2FIX(_UNKNOWN);} +#define INCR do {\ + p++;\ + if (p==pend) return INT2FIX(_UNKNOWN);\ + sequence_counter++;\ + if (sequence_counter % 2 == 1 && *p != 0xa4)\ + sequence_counter = 0;\ + if (6 <= sequence_counter) {\ + sequence_counter = 0;\ + return INT2FIX(_EUC);\ + }\ +} while (0) + + if (*p == 0xa4) + sequence_counter = 1; @@ -1954,3 +1968,3 @@ } - p++; + INCR; }