[Java] Charset

Fermé
Rom - 11 juil. 2007 à 18:58
 Rom - 12 juil. 2007 à 18:36
Bonjour,

J'ai un problème sur lequel je bloque depuis quelque temps.
Le programme est en java. Le but est de trouver quel est l'encodage (le charset) d'un fichier texte que j'entre en paramètre.
Voici l'idée :

public Charset findCharset(File f) throws Exception{

Charset ch = null;
//TODO

return ch;
}

D'après moi, il faudrait utiliser detectedCharset() mais je n'arrive pas à l'utiliser.
Finallement il ne me manque que le "//TODO" pour que sa marche!
Merci d'avance pour votre aide...
A voir également:

2 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
12 juil. 2007 à 13:54
lol, j'aime bien le "il ne manque plus que le //TODO a faire" ^^


Travaillant sur le traitement de fichier internationaux, donc différents alphabets a retranscrire dans un même format lisible, une méthode mettant en place un fichier xml dans lequel sont définis les différents type d'encodage possible pour chaque pays et une classe d'analyse a été mise en place.
Donc le //TODO n'est pas si simple que ca.
Après il faut voir quelle l'étendue de l'utilisation de ton programme, tu n'as peut etre pas besoin d'en faire autant ?

2
Tout d'abord merci pour cette réponse.
Il faudrait juste que je reconnaisse des codages assez fréquemment rencontré tel que UTF-8, UTF-16 et UTF32(little et big endian), ISO-8859-1 et -2, ASCII, ANSI, Unicaode, Unicode big Endian et les encodages de windows, le CP1251 et 1252.
Il est vrai que la tâche est plus difficile que je pensai. Pour l'instant je parcours seulement mon fichier et le met dans un buffer de byte comme peu le montrer le code ci-dessous :

public Charset findCharset(File f) throws Exception{

Charset ch = null;
FileInputStream myFichier = new FileInputStream(f);
FileChannel channelIn = myFichier.getChannel();
ByteBuffer buffer = channelIn.map(FileChannel.MapMode.READ_ONLY,0, channelIn.size());

//TODO

channelIn.close();
myFichier.close();

return ch;
}

Je pense qu'il faut gérer différents cas suivant les bits rencontrés mais je suis un peu dépasser. Pourriez-vous m'aider ?
0