11
votes

Java texte texte codant

J'ai un fichier texte et cela peut être ANSI (avec ISO-8859-2 Charset), UTF-8, UCS-2 BIG ou LITTIAN.

Y a-t-il un moyen de détecter le codage du fichier pour le lire correctement?

ou est-il possible de lire un fichier sans donner le codage? (et il lit le fichier tel quel)

(il existe plusieurs programmes pouvant détecter et convertir un codage / format de fichiers texte.)


0 commentaires

4 Réponses :


9
votes

UTF-8 et UCS-2 / UTF-16 peut être distingué raisonnablement facilement via un Ordre des octets Mark au début du fichier. Si cela existe, c'est un assez bon bet que le fichier est dans ce codage - mais ce n'est pas une certitude morte. Vous trouverez peut-être aussi bien que le fichier est dans l'un de ces codages, mais n'a pas de marque d'ordre d'octets.

Je ne sais pas grand chose à propos de ISO-8859-2, mais je ne serais pas surpris si presque chaque fichier est un fichier texte valide dans ce codage. Le meilleur que vous puissiez faire est de vérifier de manière heuristique. En effet, le page Wikipedia en conversation suggérerait que seul l'octet 0x7f n'est pas valide.

Il n'y a aucune idée de lecture d'un fichier "telle qu'elle est" et pour la sortie de texte - un fichier est une séquence de octets , vous devez donc appliquer un codage de caractères afin de décoder ces octets dans des personnages.


0 commentaires

0
votes

Si votre fichier texte est un fichier texte unicode correctement créé, la marque d'ordre d'octets (BOM) devrait vous indiquer toutes les informations dont vous avez besoin. Voir ici pour plus de détails sur BOM

Si ce n'est pas alors vous devrez utiliser une bibliothèque de détection de codage.


0 commentaires

11
votes

Oui, il existe un certain nombre de méthodes pour la détection du codage des caractères, en particulier en Java. Jetez un coup d'œil à JCHARTET qui est basé sur l'algorithme Mozilla. Il y a aussi CPDetector et un projet par IBM appelé ICU4J . Je jetterais un coup d'œil à ce dernier, car il semble être plus fiable que les deux autres. Ils fonctionnent en fonction de l'analyse statistique du fichier binaire, l'ICU4J fournira également un niveau de confiance du codage du caractère qu'il détecte afin que vous puissiez l'utiliser dans l'affaire ci-dessus. Ça marche assez bien.


0 commentaires