1

我正在尝试使用 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 编码值,但不是合适的值:/

谁能帮我解决这个问题?

非常感谢!

4

1 回答 1

0

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

于 2012-10-02T10:46:04.343 回答