Come rappresentare NSString con valore ' 336 362 340' nella codifica appropriata come testo normale?
-
28-10-2019 - |
Domanda
Ho ottenuto stringhe come questa dal flusso audio come titoli:
Þòà - Ïàäàòü
So che questa stringa in russo. E ho bisogno di mostrarlo correttamente a Uilabel. Provo questo:
NSData *data = [value dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
Adesso goodValue
Contiene il prossimo valore:
\336\362\340 - \317\340\344\340\362\374
Numero di caratteri come vedo il salvataggio con l'originale. Ma come dovrei convertirlo in stringa normale per l'uso come testo in Uilabel?
Grazie in anticipo.
Soluzione
Ho scritto un po 'di codice per iterating e registrazione di tutte le possibili combinazioni.
Inizialmente ho trovato un elenco di tutte le possibili codifica in NSString.h e l'ho impostato su C Array di possibili codifica:
int encodings[] = {
NSASCIIStringEncoding,
NSNEXTSTEPStringEncoding,
NSJapaneseEUCStringEncoding,
NSUTF8StringEncoding,
NSISOLatin1StringEncoding,
NSSymbolStringEncoding,
NSNonLossyASCIIStringEncoding,
NSShiftJISStringEncoding,
NSISOLatin2StringEncoding,
NSUnicodeStringEncoding,
NSWindowsCP1251StringEncoding,
NSWindowsCP1252StringEncoding,
NSWindowsCP1253StringEncoding,
NSWindowsCP1254StringEncoding,
NSWindowsCP1250StringEncoding,
NSISO2022JPStringEncoding,
NSMacOSRomanStringEncoding,
NSUTF16StringEncoding,
NSUTF16BigEndianStringEncoding,
NSUTF16LittleEndianStringEncoding,
NSUTF32StringEncoding,
NSUTF32BigEndianStringEncoding,
NSUTF32LittleEndianStringEncoding
};
E ora iteliamo e mostriamo tutti i risultati possibili:
int numberOfEncodings = 23;
for (int i = 0; i < numberOfEncodings; i++) {
NSLog(@"=============== %d =============", encodings[i]);
constchar *asd = [value cStringUsingEncoding:encodings[i]];
if (asd == NULL) {
NSLog(@"asd == NULL");
} else {
for (int j = 0; j < numberOfEncodings; j++) {
NSString *str = [NSStringstringWithCString:asd encoding:encodings[j]];
NSLog(@"%d: %@", encodings[j], str);
}
}
}
Dopo di che guardo attraverso i risultati e ho trovato una buona stringa. Questo è tutto =)
Nota: tutte le codifiche sono valori di NSStringencoding enum. E potresti pensare di poter iterare da 0 al numero di codifica invece di definire l'array di codifica []. Ma non dovresti farlo, perché i valori di codifica non sono INT ascendenti. Ad esempio nsmacosromanstringencoding = 30 e parte di questa codifica sono alias per un altro. Che meglio definire l'array di possibili codifica.