2010-09-09 3 views
3

Possible en double:
Java : How to determine the correct charset encoding of a streamObtenir l'encodage de fichiers en Java

utilisateur téléchargera un fichier CSV sur le serveur, serveur devez vérifier si le fichier CSV est codé en UTF-8 . Si besoin est d'informer l'utilisateur, il a téléchargé un mauvais fichier d'encodage. Le problème est comment détecter l'utilisateur de fichier téléchargé est codage UTF-8? L'arrière est écrit en Java. Donc, n'importe qui a la suggestion?

Répondre

3

Au moins dans le cas général, il n'y a aucun moyen d'être certain que le codage est utilisé pour un fichier - le meilleur que vous peut faire est une supposition raisonnable basée sur des heuristiques. Vous pouvez éliminer certaines possibilités, mais au mieux, vous rétrécissez les possibilités sans en confirmer aucune. Par exemple, la plupart des variantes ISO 8859 permettent n'importe quelle valeur d'octet (ou modèle de valeurs d'octets), donc presque n'importe quel contenu peut être encodé avec presque n'importe quelle variante ISO 8859 (et j'utilise seulement "presque" par précaution, pas de certitude que vous pourriez éliminer l'une des possibilités).

Vous pouvez, cependant, faire quelques suppositions raisonnables. Par exemple, un fichier qui commence avec les trois caractères d'une nomenclature codée en UTF-8 (EF BB BF), il est probablement sûr de supposer qu'il s'agit vraiment d'UTF-8. De même, si vous voyez des séquences comme: 110xxxxx 10xxxxxx, il est assez juste de deviner que ce que vous voyez est codé avec UTF-8. Vous pouvez éliminer la possibilité que quelque chose soit (correctement) UTF-8 activé si vous voyez une séquence comme 110xxxxx 110xxxxx. (110xxxxx est un octet principal d'une séquence, doit être suivi d'un octet non principal, pas d'un autre octet principal dans l'UTF-8 correctement codé).

0

Eh bien, vous ne pouvez pas. Vous pouvez montrer une sorte de "preview" (ou devrais-je dire review?) Avec quelques exemples de données du fichier afin que l'utilisateur puisse vérifier si cela semble correct. Peut-être avec la possibilité de sélectionner différentes options d'encodage pour aider à déterminer le bon.