À la lecture de tout fichier texte ayant l'étrange encodage?
J'ai un fichier texte avec une étrange encodage "UCS-2 Little Endian" que je veux lire son contenu à l'aide de Java.
Comme vous pouvez le voir dans la capture ci-dessus le contenu du fichier apparaissent bien dans Notepad++, mais quand je l'ai lu à l'aide de ce code, il suffit de déchets est en cours d'impression dans la console:
String textFilePath = "c:\strange_file_encoding.txt"
BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( filePath ), "UTF8" ) );
String line = "";
while ( ( line = reader.readLine() ) != null ) {
System.out.println( line ); //Prints garbage characters
}
Le point principal est que l'utilisateur sélectionne le fichier à lire, de sorte qu'il peut être de n'importe quel encodage, et depuis je ne peut pas détecter l'encodage du fichier, je le décoder à l'aide de "UTF8" mais, comme dans l'exemple ci-dessus, il ne parvient pas à le lire.
Est-il loin de lire de tels étrange fichiers dans un droit chemin ? Ou, au moins, je peux détecter si mon code ne pourra pas lire correctement ?
OriginalL'auteur Brad | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
Vous utilisez UTF-8 comme encodage dans le InputStreamReader constructeur, donc il va essayer d'interpréter les octets en UTF-8 au lieu de l'UCS-LE. Voici la documentation:
Charset
Je suppose que vous avez besoin pour utiliser l'UTF-16LE, selon elle.
Voici plus d'infos sur les jeux de caractères et leurs applications Java noms:
Codage Pris En Charge
Il n'y a pas de moyen infaillible, mais donner un coup de cette: juniversalchardet
OriginalL'auteur tempoc
Vous donnez le mauvais encodage dans
InputStreamReader
. Avez-vous essayé d'utiliser UTF-16LE si l'UTF8?Selon
Charset
:OriginalL'auteur Vivin Paliath
Vous ne pouvez pas utiliser l'encodage UTF-8 pour tous les fichiers, surtout si vous ne savez pas quel encodage de fichier à attendre. Utiliser une bibliothèque qui permet de détecter l'encodage du fichier avant de lire le fichier, par exemple: juniversalchardet ou jChardet
Pour plus d'info voir Java : Comment déterminer le bon encodage de caractères d'un ruisseau
OriginalL'auteur Dror Bereznitsky