2016-07-18 7 views
1

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?

+1

* "der Wert, der angezeigt wird" * gezeigt, wo zu finden? – Andreas

+0

Sind Sie sicher, dass der Verfasser den falschen Zeichensatz hat und nicht den Leser, mit dem Sie ihn öffnen? – Bobby

+0

Andreas. Ich kann immer noch keine CSV-Datei hochladen, aber in der CSV-Datei wie vom Betreff angegeben. –

Antwort

0

Versuchen folgende Zeilen

..... 
try (PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(filename), report.getEncoding()))) { 
    out.write(0xef); 
    out.write(0xbb); 
    out.write(0xbf); 
    List<T> filteredResult = new ArrayList(); 
    ..... 

Beschreibung hinzufügen können here

+0

Uzochi. Danke für die Antwort. Ich erkannte, dass in vielen Teilen der Anwendung der gleiche Code angewendet wird, bevor der Inhalt geschrieben wird ... Die Sache hier ist, dass ich es nicht reproduzieren kann, also muss ich auf eine Art denken, das zu testen, aber nicht lokal. .. Ich werde dich aktualisieren mein Freund ... Prost –

Verwandte Themen