2010-07-23 11 views
3

Voici un code que j'utilise pour tirer un fichier texte dans un UITextView appelé textView.Comment puis-je extraire de manière fiable un fichier texte d'encodage inconnu dans un NSString sur un iPhone?

Parce que je ne peux pas toujours connaître le codage du fichier à l'avance, j'utilise la méthode -stringWithContentsOfFile:usedEncoding:error:, qui stocke une valeur de codage par référence.

Une fois que je l'encodage, je puis ouvrez le fichier et, s'il y a une erreur, imprimer quelques informations:

NSError *_error = nil; 
NSStringEncoding _textEncoding; 
NSString *_contentText = [NSString stringWithContentsOfFile:[baseURL path] usedEncoding:&_textEncoding error:&_error]; 

if (_error) { 
    NSLog(@" _error: %@", [_error userInfo]); 
    NSLog(@" _textEncoding: %d", _textEncoding); 
} 

textView.text = _contentText; 

Sur un iPhone, si le fichier est UTF8, la La vue texte affiche correctement le contenu du fichier.

Sur un iPhone, si un fichier est codé en ASCII (NSASCIIStringEncoding), puis-je obtenir une valeur de codage de chaîne étrange:

2010-07-23 02:57:46.786 App[9160:307] _error: { 
    NSFilePath = "/var/mobile/Applications/0AD83E02-7A2A-4665-8B8F-17E03EE12B9E/Documents/A+B.txt"; 
} 
2010-07-23 02:57:46.791 App[9160:307] _textEncoding: 805298632 

Pour NSASCIIStringEncoding je devrais obtenir une valeur de 1, et non 805.298.632.

La torsion est que, si j'ouvre le fichier via le simulateur, j'obtiens la valeur de codage correcte et la vue de texte affiche le contenu du fichier codé ASCII. Je pense que j'ai la syntaxe correcte, mais je suppose que j'ai raté quelque chose, peut-être évident. Qu'est-ce que je fais mal ici?

+2

Avez-vous vérifié la (localisée) Description de l'erreur? – Eiko

+0

Le fichier se trouve-t-il dans le dossier Documents de l'appareil? Peut-être vérifier qu'il est là en utilisant 'NSFileManager' – falconcreek

+0

Oui, le fichier existe définitivement. Comme mentionné, si je code le fichier comme UTF8, le fichier sera affiché correctement dans la vue de texte. –

Répondre

1
  1. L'erreur stringWithContentsOfFile: usedEncoding: failed: est en échec. Consignez les détails de l'erreur pour déterminer pourquoi.
  2. Le spécificateur de format doit être %lx. NSStringEncoding est un NSUInteger qui est un unsigned long sur l'appareil. Certaines des valeurs énumérées sont des valeurs hexadécimales.
  3. Sur quelle plate-forme le fichier est-il créé? Êtes-vous certain que l'encodage est en fait ASCII? Vous devrez faire un hexdump sur le fichier pour vérifier si l'encodage est valide.
  4. Essayez d'initialiser _textEncoding à 0. Les constantes énumérées commencent à 1.
  5. Ajoutez une garde pour tester que la chaîne retournée n'est pas nulle avant de passer à la vue. Selon le documentation le retour est nul s'il y avait une erreur.