免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3372 | 回复: 4
打印 上一主题 下一主题

[ldap] ldap中dn的编码问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-01 15:36 |只看该作者 |倒序浏览
现有ldap server,其中的ou和o都是中文.
要写个搜索的客户端, ldap_search_ext_s中的中文部分怎么编码的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2006-09-01 17:44 |只看该作者
用UTF8编码,linux下可以用iconv(),win下不清楚,好像也可以吧,以前有类似的帖子可以找到

论坛徽章:
0
3 [报告]
发表于 2006-09-04 18:58 |只看该作者
咳,来贴一个我写的python脚本,用来过滤ldapsearch -x的返回结果。
不是很完善,不过能用.
filter里面保存不处理的binary数据域。
在把ldapfilter.py包装成一个shell脚本后,你就可以
ldapsearch -x -LLL|filter显示你的效果了。

filter:
#!/bin/sh
python /path/to/ldapfilter.py

ldapfilter.py:
import base64
import sys
#filter: all binary fields will not filter.
#        it's a filter list
filter=['jpegPhoto'];
def main():
    fin=sys.stdin;
    fout=sys.stdout;
    #used to judge whether need to pause readline() one round
    flag=False;
    line = fin.readline();
    while (line!=''):
        list=line.split('::')
        if (len(list) == 2):
            if list[0] in filter:
                #filter all binary data
                line = fin.readline();
                while ( line!='' and len(line)>1 and line[0]==' '):
                    line = fin.readline();
                fout.write(list[0]+"skipped)\n";
                continue;
            str = list[1].strip();
            line1 = fin.readline();
            while ( line1!=''):
                if ( len(line1)>1 and line1[0] ==' '):
                    str=str+line1.strip();
                else:
                    flag=True;
                    line=line1;
                    break;
                line1 = fin.readline();
            s=base64.b64decode(str);
            s=s.decode("utf-8";
            s=s.encode("gb2312";
            fout.write(list[0]+'::'+s+'\n');
        else:
            fout.write(line);
        if (flag):
            flag=False;
        else:
            line = fin.readline();
    fin.close();
    fout.close();
    return 0;
if __name__=="__main__":
        main()

如果你的locale是utf8的话,应该也就不需要这个脚本了。

论坛徽章:
0
4 [报告]
发表于 2006-09-13 09:35 |只看该作者
iconv转出来的UTF8好像不对,cd = iconv_open("UNICODEBIG","CN-GB");in的是中文,出来的结果不对,而且字节数少了,进去8个,出来会是6个。按理说UTF8比原中文字节数多的

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2006-09-13 21:47 |只看该作者
原帖由 mel 于 2006-9-13 09:35 发表
iconv转出来的UTF8好像不对,cd = iconv_open("UNICODEBIG","CN-GB");in的是中文,出来的结果不对,而且字节数少了,进去8个,出来会是6个。按理说UTF8比原中文字节数多的

多看看iconv的man page吧,到网上找找资料,iconv()是祖宗,如果不行就没有东西行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP