|
From: Bjorn O. G. <bjo...@it...> - 2007-02-19 08:18:15
|
jph...@fr...:
> Hi,
>
> I was used to work with phpldapadmin, then discovered luma. Now I need something
> more specific to my needs, and thus interested in python-ldap.
>
> Starting was really easy :-) Unfortunately, I discovered a bug in my application
> this week-end: I can not use 8 bits chars in search or add functions while I
> have no issue with these characters in Luma :-( It seems to be related to string
> encoding. Luma makes an intensive use of the "unicode" function. So I tried that
> piece of code but without success:
>
> >>> import ldap
> >>> CON=ldap.open('localhost.localdomain')
> >>> CON.simple_bind_s('','')
> >>> CON.search_s('ou=amis,dc=localdomain',ldap.SCOPE_SUBTREE,u'(cn=th?)')
<snip>
> UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6:
> ordinal not in range(128)
LDAP uses utf8 - so convert any umlauts or whatever to utf8 before doing a query.
Mostly anything can be converted _to_ utf8, but not will convert back to the
encoding you came from.
def utf8_encode(str):
return unicode(str, "iso-8859-1").encode("utf-8")
def utf8_decode(str):
return unicode(str, "utf-8").encode("iso-8859-1")
Usage:
filter = utf8_encode('cn=Bjørn Ove Grøtan')
Just change from iso-8859-1 to whatever encoding you use by default.
--
Regards
Bjørn Ove Grøtan
Luma Debian Maintainer
|