python试图将重音字母插入openldap

时间:2012-09-26 16:55:30

标签: debian python openldap

我正在尝试使用python在OpenLDAP中插入用户。问题是,当用户强调字母如ç,é,è时,python反应不好并插入值OpenLDAP编码为base64:

这是我的版本的python代码(与插入相同的问题,但在这里更容易):

def edit(self, uid, item, value):
    mod_attrs = [ (ldap.MOD_REPLACE, item, value) ]
    try:
        LDAPEntry.connect(self).modify_s('uid='+uid+','+USER_BASE_DN, mod_attrs)
    except ldap.LDAPError, e:
        print e

当我插入打印值时,我得到了,例如:

François Dujardin

在LDAP中,使用ldapsearch,我得到:

cn:: U3TFzJFkISD1kdfv1eQ==

使用ldif文件和ldapadd -f my_file.ldif给出了适当的结果。

我认为我的脚本编码存在问题,因为它没有以适当的格式提供OpenLDAP数据。但我不知道如何解决它。我试过了:

value = value.decode('unicode_escape').encode('utf-8')

value = value.decode('unicode_escape').encode('iso-8859-1')

并获取不同的base64编码值,但不是合适的值:/

有人可以帮我解决这个问题吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

确保您的内部代表权正确。 uid应该是有效的unicode字符串。其次,您应该检查ldap服务器期望的编码。 utf-8,iso-8859-1,iso-8859-15,win1252,...除此之外,如果value已经是unicode字符串,则之后不需要任何解码。