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.
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. –
ajouter le code dans la question, thx. – waitianlou
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. –