[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: UTF-8 のプロセス呼び出しで文字化け



From: Shun-ichi GOTO (後藤俊一) <shunichi.goto@xxxxxxxxx> さん曰く
Subject: Re: UTF-8 のプロセス呼び出しで文字化け
Message-ID: <2288dbd90601270318t1d53ab8fq9dce3ceef9c7c90f@xxxxxxxxxxxxxx>
Date: Fri, 27 Jan 2006 20:18:53 +0900

> > (defun encode-ldap-utf8 (string)
> >   (let* ((utf8 (encode-coding-string string 'utf-8))
> >          (len (length utf8))
> >          (i 0)
> >          ret)
> >     (while (< i len)
> >       (setq ret (concat ret (format "\\%02x" (aref utf8 i))))
> >       (setq i (1+ i)))
> >     ret))
> >
> 
> elisp的には以下が短くてヨイよ
> (defun encode-ldap-utf8 (string)
>   (mapconcat (lambda (x) (format "\\%02x" x))
> 	     (encode-coding-string string 'utf-8)
> 	     ""))

mapcar, mapconcat を毛嫌いしているときに書いたコードかな?それと
も aref に惚れていた時期か?

最近どうでも良くなってきてしまったのだけど、Zaurus だといまだに
map* と while の処理速度の差が体感できたりするコードがあるよ。

# ここはそんなに速度が必要なところではないから、後藤さんの方が素
# 敵ですね。

> > # うちのグループの会社の人ならそのまま差し上げても良いのですが ^^;;;
> > ## To: の後に日本語書いて補完はいやなので、ローマ字変換とかいろ
> > ## いろやっています。
> 
> これは結構欲しい人がいるんじゃないかなぁ。

さすがに『shirai => 白井』は無理でしょう。うちの会社はカタカナだ
から suikyo 使って『shirai => シライ』『sirai => シライ』が可能
だったけど、森下さんのところは読み仮名で OK ってないのかな?

> mew-ldap.elの諸権利を譲りますので、よいものに仕上げてほしいなぁ。:-)

## 権利がなくても、やりたいときは勝手にやるけど :-p

> 白井さんのやりかたでも結構十分だとは思いますが、レスポンスでは
> cn:: 5ZCN54Sh44GX44Gu5b6M6Jek
> あるいは
> cn;lang-ja::5ZCN54Sh44GX44Gu5b6M6Jek
> といった形式が正式にあるので、LDAPの正しいリクエスト方法を調べて、
> 正しいエンコード方法を実装するのもよいかも。

mew-ldap の改造をしていた当時、手探りでレスポンス側の真似をした
りして実験したのだけど、全部ダメだった。で、ぼくの方法はふと試し
たら出来ちゃった方法。だけど、今調べると、

http://www.ietf.org/rfc/rfc2254.txt
http://www.cysol.co.jp/ldap/2254/rfc2254JP.html

の 5章の最後で正解だったようですな。へへへ。

> なんにせよldapsearch.exeによ依存してしまうところもあるかもしれませんが。

当時 Solaris で make した OpenLDAP でも動いているよ。(短い)rfc2254
読んだけど大丈夫なんじゃない。

## ldapserch の help に rfc2254 って書いてあったとは気付かなかっ
## た。

> うちは英語名だけしか登録してなくて、漢字の名前がわからない
> という環境なのでこういう問題にあたらない代わりに恩恵もない。

## ちゃんとしたデータ管理がされている LDAP サーバって羨ましいか
## も。組織での絞りこみも出来ないフラットなデータ構造なので、佐
## 藤さんとか田中さんとかは下の名前までわからないと簡単に limit
## over :-<

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxx)