Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

テスト: UTF-8 の query 対応



寺西です。

現状の Namazu では、UTF-8 で query が送られてくる場合、
文字化けを起こし、検索できません。
これは UTF-8 に対応していないからですが、そろそろ UTF-8 対応も
考えないといけないかなと思っています。

まだまだテストが十分できていませんが、叩き台にでもなればと思い、
iconv を使った上記問題対応差分を公開します。(HEAD 用)

# 心配な部分は iconv が漢字コードを誤認しないかどうか。

iconv に関しては OS 付属のものの場合、対応している Charset が
限られるケースがあるのですが、GNU iconv を使うという条件なら
何とかなるかなと思っています。
(configure.in とかまでは手が回っていません。)

nmz_from_to() は、Perl 5.8 の from_to ライクな関数として実装して
います。

# 当面、commit するつもりはありません。誤動作しそうだし。

$ cvs diff codeconv.h
Index: codeconv.h
===================================================================
RCS file: /storage/cvsroot/namazu/nmz/codeconv.h,v
retrieving revision 1.9
diff -r1.9 codeconv.h
7a8,9
> extern char *nmz_from_to(char *buffer, int bufferSize, const char *fromCode, const char *toCode);
>

$ cvs diff codeconv.c
Index: codeconv.c
===================================================================
RCS file: /storage/cvsroot/namazu/nmz/codeconv.c,v
retrieving revision 1.32
diff -r1.32 codeconv.c
50a51,52
> #include <iconv.h>
>
492a495,498
>         if (nmz_from_to(query, BUFSIZE, "utf-8", "eucJP")) {
>             zen2han(query);
>             return;
>         }
498a505,543
> char *
> nmz_from_to(char *buffer, int bufferSize,
>     const char *fromCode, const char *toCode)
> {
>     iconv_t cd;
>     size_t sz_from, sz_to;
>     char *toBuffer;
>     char *from, *to;
>     size_t status;
>
>     sz_from = strlen(buffer) + 1;
>     sz_to = bufferSize;
>
>     toBuffer = (char *)calloc(sizeof(char), sz_to);
>     if (!toBuffer) {
>         return NULL;
>     }
>
>     from = buffer;
>     to = toBuffer;
>
>     cd = iconv_open(toCode, fromCode);
>
>     status = iconv(cd, &from, &sz_from, &to, &sz_to);
>
>     iconv_close(cd);
>
>     if (status == -1) {
>         free(toBuffer);
>         return NULL;
>     }
>
>     strncpy(buffer, toBuffer, bufferSize - 1);
>     buffer[bufferSize - 1] = '\0';
>
>     free(toBuffer);
>
>     return buffer;
> }
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E