2017-09-01 7 views
0

I cert Informationen lesen durch VerwendungWie um zu überprüfen NSString kodieren

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

die die cert Zusammenfassung erhalten, wenn die Zusammenfassung chinesisch ist, wie , die Zusammenfassung Rückkehr als ä¸

wie kann ich kodieren ä¸ bis richtig?

Der Code, wie ich cert Zusammenfassung

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); 
} 

erhalten, wenn Zusammenfassung eine chinesische Zeichenfolge ist, ist das Ergebnis nicht richtig.

+0

Wie haben Sie die Zusammenfassung untersucht? Zeigen Sie die Code- oder Debuggerbefehle an, die Sie zum Anzeigen/Drucken/Protokollieren und der genauen Ausgabe verwendet haben. –

+0

fügen Sie den Code in der Frage hinzu, thx. – waitianlou

+0

Sie haben eine schließende Klammer in der 'SecCertificateCopySubjectSummary()' Zeile, was mich fragt, wie sich das von Ihrem echten Code unterscheidet. Es kann jedoch sein, dass dies nur ein Fehler in 'SecCertificateCopySubjectSummary()' ist. Ein "NSString" oder "CFString" soll codierungsneutral sein. Oder eine andere Art, darüber nachzudenken, sollte bereits in eine interne Repräsentation entschlüsselt werden. Die API bezieht sich auf "Zeichen", womit eigentlich UTF-16-Code-Einheiten gemeint sind, aber die interne Darstellung könnte alles sein. Es sollte nicht möglich sein, einen solchen Codierungsfehler zu bekommen. –

Antwort

0

Lösen Sie das Problem. Zuerst habe ich jedes Zeichen in der NSString drucken, sieht aus wie

228 184 173

und chinesische Zeichen Verwendung 3 Zeichen in UTF-8, so dass ich wechseln sie bin

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

Und für UTF8 Decoding with NSString Hilfe, schließlich wechseln die Zeichenfolge form utf8 zu Unicode.