En général, vous ne pouvez pas. Cependant, vous pouvez identifier de manière fiable les fichiers UTF-8 - si un fichier est UTF-8 valide, il est peu probable qu'il soit supposé être un autre encodage (sauf si tous les octets sont dans la plage ASCII, auquel cas le codage ASCII étendu, y compris UTF-8, vous donnera le même résultat). Tous les encodages Unicode ont également un BOM optionnel qui les identifie. Une approche raisonnable serait donc:
- Recherchez une nomenclature valide. S'il y en a un, utilisez l'encodage approprié.
- Sinon, essayez de l'interpréter comme UTF-8. Vous pouvez le faire en appelant
initWithData:data encoding:NSUTF8StringEncoding
et en vérifiant si le résultat est non-nul.
- Si cela échoue, utilisez un codage 8 bits par défaut, tel que
-[NSString defaultCStringEncoding]
(qui fournit une estimation appropriée aux paramètres régionaux).
Il est possible d'essayer d'améliorer la conjecture dans la dernière étape en essayant différents encodages différents et choisir celui qui a le moins de séquences de lettres avec l'ordure au milieu, où « junk » est un caractère qui est pas une lettre, un espace ou un signe de ponctuation commun. Cela augmenterait considérablement la complexité sans être réellement fiable.
En bref, pour pouvoir gérer tous les encodages disponibles, vous devez faire ce que fait TextEdit: transférer la décision à l'utilisateur.
Oh, encore une chose: dès 10.5, l'encodage est souvent stocké avec un fichier dans l'attribut étendu com.apple.TextEncoding non documenté. Si vous ouvrez un fichier avec +[NSString stringWithContentsOfFile:]
ou similaire, il sera automatiquement utilisé s'il est présent.
On dirait qu'il ya une raison pour laquelle il est pas encore officiel. Je l'ai couru avec un encodage PDF NSData il retourne -2147482362. – FireDragonMule
Je ne suis pas tout à fait sûr si c'est comme cela que c'est prévu pour fonctionner. Un pdf n'est pas une chaîne et cette méthode trouve des encodages pour les chaînes à partir d'un 'NSData'. Quelle est votre intention? – HAS
Je récupère un pdf à travers un SDK comme NSData. Je n'ai que des problèmes d'affichage dans le webview parce que je ne sais pas quel est le codage ou s'il y a même un encodage. – FireDragonMule