Détecter l'encodage d'un fichier texte
Projet gus05 de développement Java :: Développements :: Quelque-unes de mes entités :: Gestion des fichiers :: Les fichiers texte
Page 1 sur 1
Détecter l'encodage d'un fichier texte
Voici une entité pour détecter l'objet Charset qui permettra de lire correctement le contenu texte d'un fichier.
gus.charset.findcharset.txtfile
gus.charset.findcharset.txtfile
- Code:
package gus05.entity.gus.charset.findcharset.txtfile;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.util.Iterator;
import java.util.Map;
import gus05.framework.core.Entity;
import gus05.framework.features.Transform;
public class FindCharsetTxtFile implements Entity, Transform {
public String getName() {return "gus.charset.findcharset.txtfile";}
public String getCreationDate() {return "2010.09.21";}
public static final Charset[] CHARSETS = new Charset[]{
Charset.forName("windows-1252"),
Charset.forName("UTF-8"),
Charset.forName("ISO-2022-JP"),
Charset.forName("UTF-16"),
Charset.forName("UTF-32"),
Charset.forName("EUC-JP"),
Charset.forName("ISO-8859-1"),
Charset.forName("UTF-7"),
Charset.forName("Shift_JIS"),
};
public Object transform(Object obj) throws Exception
{
File file = (File) obj;
if(file.length()==0) return Charset.defaultCharset();
if(detectCharset(file,Charset.defaultCharset()))
return Charset.defaultCharset();
for(int i=0;i<CHARSETS.length;i++)
if(detectCharset(file,CHARSETS[i])) return CHARSETS[i];
Map m = Charset.availableCharsets();
Iterator it = m.keySet().iterator();
while(it.hasNext())
{
Object key = it.next();
Charset c = (Charset) m.get(key);
if(detectCharset(file,c)) return c;
}
return null;
}
private boolean detectCharset(File f, Charset charset)
{
try
{
FileInputStream fis = new FileInputStream(f);
BufferedInputStream input = new BufferedInputStream(fis);
CharsetDecoder decoder = charset.newDecoder();
byte[] buffer = new byte[512];
boolean b = false;
while((input.read(buffer)!=-1) && !b)
{b = identify(buffer,decoder);}
input.close();
return b;
}
catch(Exception e)
{return false;}
}
private boolean identify(byte[] bytes, CharsetDecoder decoder)
{
try{decoder.decode(ByteBuffer.wrap(bytes));}
catch(CharacterCodingException e)
{return false;}
return true;
}
}
Sujets similaires
» Détecter le type de fichier DLL, 32bit ou 64bit
» Lire le contenu d'un fichier texte
» Lire un fichier TTF
» Lire un fichier EML
» Copie de fichier
» Lire le contenu d'un fichier texte
» Lire un fichier TTF
» Lire un fichier EML
» Copie de fichier
Projet gus05 de développement Java :: Développements :: Quelque-unes de mes entités :: Gestion des fichiers :: Les fichiers texte
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Mar 16 Sep - 12:01 par Gus
» Présentation du jeu Vindinium
Jeu 20 Fév - 15:32 par Gus
» Rechercher la cible la plus proche avec le "Breadth First Search"
Jeu 20 Fév - 13:06 par Gus
» Impression d'écran avec sélection de zone
Jeu 20 Fév - 12:12 par Gus
» Envoyer un mail par un compte Gmail
Jeu 25 Avr - 14:04 par Gus
» Streaming : comment télécharger les vidéos
Lun 4 Fév - 19:59 par Gus
» Synology : installer ipkg
Mar 22 Jan - 21:22 par Gus
» Trouver le type de lecteur avec JNA
Mer 9 Jan - 23:11 par Gus
» Adresse ip publique et adresse ip privée, Internet box et UPnP
Mer 9 Jan - 21:02 par Gus
» Accéder au numéro de série du lecteur par un script vb
Mer 9 Jan - 19:31 par Gus