détecter l'encodage ?
tablier
Membre
Je souhaite faire un string avec du texte contenu dans un fichier. L'encodage du texte n'est pas a priori connu. Si l'encodage était connu j'utiliserais:
J'envisage donc de mettre le contenu du fichier dans un NSData, puis de faire des tests pour déterminer l'encodage du contenu.
Y-a-t-il une autre méthode pour trouver l'encodage? :-\\
NSError *lerreur ;<br />NSString *machin ;<br /><br />machin = [NSString stringWithContentsOfFile:chemin_Du_Ficher encoding:Encodage_Du_Ficher error:&lerreur] ;
J'envisage donc de mettre le contenu du fichier dans un NSData, puis de faire des tests pour déterminer l'encodage du contenu.
Y-a-t-il une autre méthode pour trouver l'encodage? :-\\
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Les seules méthodes disponibles pour connaà®tre l'encodage d'un fichier :
Cette dernière méthode consiste simplement à effectuer des calculs statistiques sur le contenu de ton fichier texte "brut" et en particulier regarder certaines séquences d'octets (par exemple pour les lettres accentuées, la séquence d'octet va différer si c'est ISO-8851-1, UTF8 ou UTF16, ou autre), pour essayer de deviner l'encodage de texte le plus probable.
Ca reste statistique donc de la probabilité et pas une méthode sûre à 100% mais c'est la seule méthode disponible quel que soit le type du fichier texte.
Après il doit traà®ner j'imagine des codes sur le net pour effectuer ces statistiques. Tu peux affiner la probabilité de trouver le bon encodage si tu connais de plus la langue utilisée pour écrire le texte (anglais, français, chinois, ...)
http://developer.apple.com/documentation/Carbon/Reference/File_Manager/Reference/reference.html#//apple_ref/doc/constant_group/Catalog_Information_Bitmap_Constants
Je pense qu'il ne reste que la méthode statistique. Dans l'explication du champ textEncodingHint, on trouve:
Ce champ, qui est optionnel dans FSCatalogInfo, parait dédié au changement d'encodage des noms de fichiers, et non pas à l'encodage des contenus.
Bon, il faut que je m'y mette, hélas! ???
Mais ça m'étonne, le nom est en UTF-16 décomposé au niveau FS à priori...
Pour moi ça veut dire que pour deviner l'encodage il s'aide des deux choses : la métadonnées TextEncodingHint ET le nom du fichier.
Peut-être parce qu'il regarde l'extension du fichier pour essayer de voir ce qu'il est sensé contenir, ou qu'il sait que certains fichiers types (fichiers du système Unix par exemple) ont un encodage prédéfini (fstab, crontab, httpd, ...) ??
Enfin bon de toute façon ça change rien je pense que la seule méthode valable est la méthode statistique, surtout si tu as l'air de dire que TextEncodingHint n'est pas toujours utilisé.
(Ou alors regarder s'il est renseigner et s'il ne l'est pas tomber dans la méthode statistique... Ou l'utiliser pour alimenter le vecteur initial de la méthode statistique ?)
Non il ne se base pas sur le type du fichier, mais sur le nom du fichier. Il peut par exemple voir que le nom du fichier contient des caractères chinois, il va donc penser que le contenu du fichier est en chinois.
Effectivement, ça doit être un truc du genre
Vu que l'encodage du nom de fichier est fixe et que l'unicode est bien découpé pour tous les alphabets du monde, ça doit pouvoir aider quand le nom est dans la langue native.