J'ajouter du texte codé dans Windows 1252 dans un fichier CSV ainsi:différents encodages chaque fois que j'ajouter à un fichier CSV
public static final Charset CHARSET = Charset.forName("Windows-1252");
public void dumpToCSV(final List<String[]> content,
final char delimiter,
final String enc,
final int csvDays) {
File file = new File(Constants.CSV_FILENAME);
// Convert the Character Format before dumping to file:
try (
OutputStreamWriter os = new OutputStreamWriter(
new FileOutputStream(file, true),
CHARSET);
CSVWriter cw = new CSVWriter(os, delimiter)) {
// Remove old lines
clearCsvByDays(file, csvDays, Character.toString(delimiter));
// Dump new content into file.
cw.writeAll(content);
} catch (IOException e) {}
}
private void clearCsvByDays(final File file, final int csvDays, final String delim)
throws IOException {
List<String> out = Files.lines(file.toPath(), CHARSET)
.filter(line -> mustFilter(line, csvDays, delim))
.collect(Collectors.toList());
Files.write(file.toPath(), out,
StandardOpenOption.WRITE,
StandardOpenOption.TRUNCATE_EXISTING);
}
La première écriture dans le fichier, le résultat est comme prévu, les caractères sont encodés en Windows-1252 et sont bien affichés sur le programme cible. Le second vidage, il ajoute les nouvelles données sur UTF-8, je ne sais pas pourquoi.
"Éspáñà tëst";"ADN";"26-09-2017";"0";"0";"0";"0" <-- 2nd dump (new)
"ʳpⲠ t촴";"ADN";"26-09-2017";"0";"0";"0";"0" <-- 1st dump (old)
La troisième décharge, il ajoute les nouvelles données sur un autre codage différent, mais conserve la première ligne correcte de dumping sur Windows-1252.
"Ãspáñà tëst";"ADN";"26-09-2017";"0";"0";"0";"0" <-- 3rd dump (new)
"Éspáñà tëst";"ADN";"26-09-2017";"0";"0";"0";"0" <-- 2nd dump (old)
"ʳpⲠ t촴";"ADN";"26-09-2017";"0";"0";"0";"0" <-- 1st dump (old)
Si je continue d'ajouter, chaque fois que c'est un codage différent.
Pourquoi cela se produit-il et comment puis-je le réparer?
D'où vient 'content' venir? – Berger
Les premières valeurs proviennent d'un fichier .properties, elles doivent donc être renseignées manuellement. Toutes les valeurs 0 proviennent d'une réponse WS. – another
Vous utilisez 'CSVWriter' pour écrire les données, mais ce n'est pas une classe Java standard. Y a-t-il un bug dans sa mise en œuvre? Difficile à dire sans connaître le code. – toongeorges