Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
テスト: UTF-8 の query 対応
- From: Tadamasa Teranishi <yw3t-trns@xxxxxxxxxxxxxxx>
- Date: Thu, 22 Jan 2004 23:54:52 +0900
- X-ml-name: namazu-devel-ja
- X-mail-count: 03588
寺西です。
現状の 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