在Xcode中使用openssl 解析X509 主题 subject 中文出现乱码:
    subject = X509_get_subject_name(x509Cert);            //获取证书主题信息
    unsigned long rv = 0;
    NSMutableString *subjectstring = [[NSMutableString alloc]init];
   // X509_NAME_get_entry(subject, subject->modified)->value->data[i];    entriesNum = sk_X509_NAME_ENTRY_num(subject->entries);
    //循环读取个条目信息
    for(i=0;i<entriesNum;i++)
    {
        //获取第I个条目值
        name_entry = sk_X509_NAME_ENTRY_value(subject->entries,i);
        Nid = OBJ_obj2nid(name_entry->object);
        //判断条目编码的类型
        NSLog(@" type is  %d",name_entry->value->type);
            msginfoLen=name_entry->value->length;
            memcpy(msginfo,name_entry->value->data,msginfoLen);
            msginfo[msginfoLen]='\0';
        switch(Nid)
        {
            case NID_countryName://国家C
                //printf("issuer 's C:%s\n",msginfo);
                [subjectstring appendString:[NSString stringWithFormat:@"C=%s,",msginfo]];
                break;
            case NID_stateOrProvinceName://省ST
                //printf("issuer 's ST:%s\n",msginfo);
                [subjectstring appendString:[NSString stringWithFormat:@"ST=%s,",msginfo]];
               // [subjectstring appendString:tempstr];
                break;
            case NID_localityName://地区L
                //printf("issuer 's L:%s\n",msginfo);
                [subjectstring appendString:[NSString stringWithFormat:@"L=%s,",msginfo]];
                break;
            case NID_organizationName://组织O
                //printf("issuer 's O:%s\n",msginfo);
                [subjectstring appendString:[NSString stringWithFormat:@"O=%s,",msginfo]];
                break;
            case NID_organizationalUnitName://单位OU
                //printf("issuer 's OU:%s\n",msginfo);
                [subjectstring appendString:[NSString stringWithFormat:@"OU=%s,",msginfo]];
                break;
            case NID_commonName://通用名CN
                //printf("issuer 's CN:%s\n",msginfo);
                [subjectstring appendString:[NSString stringWithFormat:@"CN=%s",msginfo]];
                break;
            case NID_pkcs9_emailAddress://Mail
                //printf("issuer 's emailAddress:%s\n",msginfo);
                break;
        }//end switch
    }
subjectstring打印出来中文是乱码,英文是正常测试过多次,当name_entry->value->type==V_ASN1_BMPSTRING 主题subject的value type是V_ASN1_BMPSTRING的时候,也就是中文会出现乱码,是英文字符的话 主题subject的value type是V_ASN1_PRINTABLESTRING 是正常显示的。现在不知道怎么正常显示中文,求大家指点迷津。多谢多谢,已经困扰我很久了,知道的,真的给点帮助啊!