Unten ist der Java-Code, der zum Generieren der CSV-Datei verwendet wird. Obwohl beim Debuggen dieser report.getEncoding()
den Wert von "UTF-8" erhält, wird die Datei mit einem falschen Zeichensatz generiert.CSV-Java-generierte Dateien werden mit falschem Zeichensatz geöffnet
public void generateFile(ReportBean<T> report, String filename, ReportAggregationPosition reportAggregationPosition) throws IOException {
try (PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(filename), report.getEncoding()))) {
List<T> filteredResult = new ArrayList();
for (T row : report.getResult()) {
if (logRow(row)) {
log.info("Logging row for report={} - {}", filename, getText(row));
}
if (ignoreRow(row)) {
log.info("Ignoring row for report={} - {}", filename, getText(row));
continue;
}
filteredResult.add(row);
}
if (reportAggregationPosition == ReportAggregationPosition.FIRST) {
out.println(filteredResult.size());
}
out.print(getHeader());
if (reportAggregationPosition == ReportAggregationPosition.SECOND) {
out.println(filteredResult.size());
}
for (T row : filteredResult) {
out.print(getText(row));
}
if (reportAggregationPosition == ReportAggregationPosition.LAST) {
out.println(String.format("Total number of rows: %s", filteredResult.size()));
}
}
Der erwartete Wert ist:
Test-vfde - die versteckte Ausgabe - Gebühr pro Benutzer Leistungszeit 07/07/16 bis 08/05/16
Aber der Wert dass gezeigt (ich konnte nicht ein Foto hochladen, wie ich habe Kredite immer noch nicht) ist die folgende:
Test-vfde - die versteckte Ausgabe -? GebÇŸ‘Ç ¶¬hr pro Benutzer Leistungszeit 07/07/16 bis 08/05/16
Charaktere wie "ä" oder "ü" richtig gezeigt. Wie soll ich das angehen?
* "der Wert, der angezeigt wird" * gezeigt, wo zu finden? – Andreas
Sind Sie sicher, dass der Verfasser den falschen Zeichensatz hat und nicht den Leser, mit dem Sie ihn öffnen? – Bobby
Andreas. Ich kann immer noch keine CSV-Datei hochladen, aber in der CSV-Datei wie vom Betreff angegeben. –