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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top