J'ai essayé d'utiliser java.io.FileReader pour lire certains fichiers texte et les convertir en une chaîne, mais j'ai trouvé que le résultat était mal encodé et pas du tout lisible.
Voici mon environnement:
Windows 2003, encodage du système d'exploitation: CP1252
Java 5.0
Mes fichiers sont codés UTF-8 ou CP1252, et certains d'entre eux (fichiers codés UTF-8) peuvent contenir des caractères chinois (non latins).
J'utilise le code suivant pour faire mon travail:
private static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
FileReader reader = new FileReader(filePath);
//System.out.println(reader.getEncoding());
BufferedReader reader = new BufferedReader(reader);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
Le code ci-dessus ne fonctionne pas. J'ai trouvé que l'encodage de FileReader est CP1252 même si le texte est encodé UTF-8. Mais le JavaDoc de java.io.FileReader dit que:
Les constructeurs de cette classe supposent que le codage de caractères par défaut et la taille par défaut du tampon d'octets sont appropriés.
Cela signifie-t-il que je ne suis pas obligé de définir moi-même le codage des caractères si j'utilise FileReader? Mais j'ai actuellement des données mal encodées, quelle est la bonne façon de gérer ma situation? Merci.