通过python-ldap从Active Directory使用Unicode编码的字符串
问题内容:
我已经提出了这个问题,但是经过一些测试,我决定使用一些更具体的信息来创建一个新问题:
我正在从Active Directory中使用python-ldap(和Python
2.7)读取用户帐户。这确实工作良好,但是我在使用特殊字符时遇到了问题。在控制台上打印时,它们看起来确实像UTF-8编码的字符串。目标是将它们写入MySQL
DB,但从一开始我就不会将这些字符串放入适当的UTF-8中。
示例(fullentries是我所有AD条目的数组):
fullentries[23][1].decode('utf-8', 'ignore')
print fullentries[23][1].encode('utf-8', 'ignore')
print fullentries[23][1].encode('latin1', 'ignore')
print repr(fullentries[23][1])
使用手动插入的字符串进行的第二项测试如下:
testentry = "M\xc3\xbcller"
testentry.decode('utf-8', 'ignore')
print testentry.encode('utf-8', 'ignore')
print testentry.encode('latin1', 'ignore')
print repr(testentry)
第一个示例ist的输出:
M\xc3\xbcller
M\xc3\xbcller
u'M\\xc3\\xbcller'
编辑:如果我尝试用.replace(’\\\',’\\)替换双反斜杠,则输出保持不变。
第二个示例的输出:
Müller
M�ller
'M\xc3\xbcller'
有什么方法可以使AD输出正确编码吗?我已经阅读了很多文档,但是所有这些都说明LDAPv3严格为您提供了UTF-8编码的字符串。Active
Directory使用LDAPv3。
我在这个问题上的更老的问题是在这里:使用Python将UTF-8字符串写入MySQL
编辑:添加了代表信息
问题答案:
首先,要知道print
Windows控制台通常是使数据乱码的步骤,因此对于您的测试,您应该print repr(s)
查看字符串中的确切字节。
您需要找出如何编码来自AD的数据。再次,print repr(s)
将让您看到数据的内容。
更新:
好的,您好像以某种方式收到了奇怪的字符串。可能有一种方法可以使它们变得更好,但是尽管效果不佳,但您可以在任何情况下进行调整:
u.decode('unicode_escape').encode('iso8859-1').decode('utf8')
您可能想研究是否可以更自然的格式获取数据。