疲れたので、今日は早く帰ってきた。
知っている人は知っていると思うが、うちの会社(というか親会社)の 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")