2015-04-14 6 views
16

Sto lavorando a un'app che consente all'utente di incollare il testo e quindi l'app elabora quel testo.Come gestire una stringa di input dell'utente che restituisce un errore di "carattere ascii non stampabile trovato nell'origine" quando viene incollato in Xcode?

Con una determinata stringa di testo viene visualizzato un errore "carattere ascii non stampabile trovato nel file di origine". Il carattere non stampabile sembra essere una scheda, ma non ne sono sicuro. Comunque, causa problemi quando cerco di elaborare il testo.

Come posso escludere questo o altri caratteri non stampabili quando salvi la stringa in una variabile?

Oppure c'è un altro modo per affrontare questo?

+2

O modificarlo in qualche modo convertendolo nel formato supportato da Xcode e riconvertirlo nel formato che si desidera utilizzare in runtime o lavorare con i file di risorse. –

+0

Questo è l'input dell'utente che sta bloccando la mia app. Qualcosa, forse una scheda, nell'input dell'utente sta bloccando l'app. Ho incollato quello strano input dell'utente in xcode e ho ottenuto quell'errore. Come posso modificare l'input dell'utente dopo che è stato salvato come una stringa nella variabile, in modo che più tardi, quando cerco di elaborarlo, non si bloccherà l'app? In altre parole, come posso rilevare e filtrare quel personaggio cattivo? – webmagnets

+0

Vedere [questa risposta] (http://stackoverflow.com/a/26080815/35499). Si parla di rompere una stringa Swift su caratteri non stampabili, quindi dovrebbe essere vicino a ciò che si desidera. – dean

risposta

5

Ecco un altro modo per farlo.

Questa versione consente inoltre nuovi caratteri di linea.

func convertString(string: String) -> String { 
    var data = string.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: true) 
    return NSString(data: data!, encoding: NSASCIIStringEncoding) as! String 
} 
3

Se si desidera mantenere solo i caratteri ASCII stampabili, questo codice dovrebbe funzionare.

extension String { 
    func printableAscii() -> String { 
     return String(bytes: filter(self.utf8){$0 >= 32}, encoding: NSUTF8StringEncoding) ?? "" 
    } 
} 

Nota in questo modo verranno filtrate anche le schede e gli avanzamenti di riga che potrebbero non essere previsti. ASCII non stampabile sono valori inferiori a 0x20. Ecco una schermata di Playground.

enter image description here

Problemi correlati