Newbie and encoding
Bjorn Ove Grotan
bjorn.grotan at itea.ntnu.no
Mon Feb 19 09:18:06 CET 2007
jphthierry at free.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
More information about the python-ldap
mailing list