2017-09-01 6 views
0

Je lis d'info cert par l'utilisationComment vérifier NSString encode

NSString *summary = CFBridgingRelease(SecCertificateCopySubjectSummary(cert)); 

qui récupère le résumé de cert, lorsque le résumé est chinois, comme , le retour sommaire comme ä¸

Comment puis-je encoder ä¸ à correct?

Le code comment je reçois résumé cert

CFMutableDictionaryRef query = CFDictionaryCreateMutable(nil, 4, nil, nil); 
CFDictionaryAddValue(query, kSecClass, kSecClassCertificate); 

CFDictionaryAddValue(query, kSecMatchLimit, (const void *)@(100)); 
CFDictionaryAddValue(query, kSecReturnRef, kCFBooleanTrue); 

CFArrayRef items; 
OSStatus status = SecItemCopyMatching(query, (CFTypeRef *)&items); 
NSArray *certificates = CFBridgingRelease(items); 
for (int i = 0; i < certificates.count; i++) 
{ 
    SecCertificateRef certificate = (__bridge SecCertificateRef)certificates[i]; 
    NSString *summary = (NSString *)CFBridgingRelease(SecCertificateCopySubjectSummary(certificate); 
    NSLog(@"%@", summary); 
} 

quand résumé est une chaîne chinoise, le résultat est pas juste.

+0

Comment avez-vous examiné la chaîne de résumé? Affiche les commandes de code ou de débogueur que vous avez utilisées pour l'afficher/l'imprimer/l'enregistrer et la sortie exacte. –

+0

ajouter le code dans la question, thx. – waitianlou

+0

Il vous manque une parenthèse fermante sur la ligne 'SecCertificateCopySubjectSummary()', ce qui me fait me demander comment cela diffère de votre vrai code. Quoi qu'il en soit, il se peut que ce soit juste un bug dans 'SecCertificateCopySubjectSummary()'. Un 'NSString' ou' CFString' est destiné à être neutre au niveau de l'encodage. Ou, une autre façon d'y penser, il devrait déjà être décodé en une représentation interne. L'API est en termes de "caractères", ce qui signifie en fait des unités de code UTF-16, mais la représentation interne pourrait être n'importe quoi. Il ne devrait pas être possible d'obtenir une erreur d'encodage comme celle-ci. –

Répondre

0

Résolvez le problème. Tout d'abord j'imprimer chaque caractère dans la NSString, ressemble

228 184 173

Et l'utilisation de caractères chinois 3 car en UTF8, donc je passe à bin

0b1110 0100 
0b10 111000 
0b10 101101 
//for utf8 to unicode, it's 
0100111000101101 
//to int 
20013 
//which is 中 at unicode 

Et pour UTF8 Decoding with NSString aide, enfin basculer la chaîne de caractères utf8 à unicode.