疲れたので、今日は早く帰ってきた。
知っている人は知っていると思うが、うちの会社(というか親会社)の LDAP server はひどいものである。どんなにひどいかは内緒だが、今週たまたま見た資料によると「氏名を全角カタカナ」で検索するのを推奨しているようだ。
じゃぁってんで、「モエ パンダ」を UTF-8 に符号化して手打ちでいろいろ試してみてもうまくいかない。正解が全然わからなかったので、やっとRFC2254を見たところ、送るほうは Base64 しないのね。どうやって、Base64 した文字列かどうか判定しているのか不思議だったんだわ。(ばかだから (cn:=xxxx) とかも試してしまった)
(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)) (defun mew-ldap-custom-utf8 (str) (let ((strs (split-string str "\\.")) kanas kana) (setq kana (mapconcat (lambda (x) (japanese-katakana (suikyo-convert-romaji-kana x))) strs (japanese-zenkaku " "))) (when (string-match "\\.$" str) (concat kana (japanese-zenkaku " "))) (list (encode-ldap-utf8 kana)))) (mew-ldap-custom-utf8 "moe.panda") => ("\\e3\\83\\a2\\e3\\82\\a8\\e3\\80\\80\\e3\\83\\91\\e3\\83\\b3\\e3\\83\\80")