In generale, non è possibile. Tuttavia, puoi identificare in modo affidabile i file UTF-8 - se un file è UTF-8 valido, non è molto probabile che si supponga che sia una qualsiasi altra codifica (eccetto se tutti i byte sono nell'intervallo ASCII, nel qual caso qualsiasi " codifica ASCII estesa ", incluso UTF-8, fornirà lo stesso risultato). Tutte le codifiche Unicode hanno anche un BOM opzionale che le identifica. Quindi un approccio ragionevole sarebbe:
- Cercare una BOM valida. Se ce n'è uno, usa la codifica appropriata.
- Altrimenti, provare a interpretarlo come UTF-8. È possibile farlo chiamando
initWithData:data encoding:NSUTF8StringEncoding
e controllando se il risultato non è zero.
- Se ciò non riesce, utilizzare una codifica a 8 bit predefinita, ad esempio
-[NSString defaultCStringEncoding]
(che fornisce un'ipotesi appropriata per le impostazioni internazionali).
E è possibile per cercare di migliorare l'ipotesi nell'ultimo passaggio provando varie codifiche diverse e scegliendo quello che ha il minor numero di sequenze di lettere con spazzatura in mezzo, dove “spazzatura” è qualsiasi carattere che è non una lettera, uno spazio o un segno di punteggiatura comune. Ciò aumenterebbe significativamente la complessità pur non essendo effettivamente affidabile.
In breve, per essere in grado di gestire tutte le codifiche disponibili è necessario eseguire ciò che TextEdit fa: deviare la decisione all'utente.
Oh, un'altra cosa: a partire da 10.5, la codifica viene spesso archiviata con un file nell'attributo esteso com.apple.TextEncoding non documentato. Se apri un file con +[NSString stringWithContentsOfFile:]
o simile, questo verrà automaticamente utilizzato se presente.
fonte
2009-08-29 15:55:00
sembra che ci sia un motivo per cui è non ancora ufficiale L'ho eseguito con una codifica PDF NSData che restituisce -2147482362. – FireDragonMule
Non sono abbastanza sicuro se è così che si intende lavorare. Un pdf non è una stringa e questo metodo trova le codifiche per le stringhe da un 'NSData'. Qual è il tuo intento? – HAS
Sto recuperando un pdf attraverso un SDK come NSData. In questo momento ho problemi a visualizzarlo nella webview perché non so quale sia la codifica o se esiste anche una codifica. – FireDragonMule