2012-01-05 7 views
9

sto leggendo un trend modulo google file CSV scaricato, qui ci sono i contenuti di file quando aperto nel blocco note (prime due righe solo):la lettura del file CSV in java aggiunge spazio tra ogni carattere

ferrari ferrari (errore standard)
0.735 2%

Leggendo il file utilizzando readline la linea di lettura contiene spazio tra ogni carattere, nel caso di cui sopra l'output è:

f r r a r i r r a r i (s t d r r o r)
0. 7 3 5 2%

(Ci sono tabulazioni tra "Ferrari" e "Ferrari" e tra 0,735 e 2% che StackOverflow non visualizzata)

carattere Newline alla fine di ogni linea viene letta anche due volte. Perché è così? Qualche soluzione?

Ecco il codice che sto usando per leggere il file:

BufferedReader Reader = new BufferedReader(new FileReader("trend.csv")); 
String line = null; 
while ((line = Reader.readLine()) != null) 
    System.out.println(line); 

Edit: ci sono anche alcuni personaggi strani letti alla partenza di file di

Edut: Ha ottenuto la soluzione

era il problema di codifica, cambiare la prima riga:

BufferedReader Reader = new BufferedReader(new InputStreamReader(new FileInputStream("trend.csv"), "UTF-16")); 
+5

Sembra Unicode per me. –

+0

Ho eseguito il codice esatto sulla mia macchina e ha stampato correttamente. In quale ambiente stai correndo? Windows 7, Eclipse Helios qui. – Logan

+0

Sto usando Windows 7 e Eclipse. Hai copiato il file dalla mia domanda. Utilizza questo file: http://www.google.com/trends/viz?q=ferrari&date=2011-9&geo=all&graph=all_csv&sort=0&scale=1&sa=N –

risposta

13

è d per la codifica dei caratteri ... Ho appena scaricato il file dalle tendenze e provato, ha avuto lo stesso problema.

L'ho preso in giro se uso set di caratteri UTF-16.

public class TrendReader 
{ 
    public static void main(String args[]) throws Exception 
    { 
     //BufferedReader Reader = new BufferedReader(new FileReader("trends.csv")); 
     BufferedReader Reader = new BufferedReader(new InputStreamReader(new FileInputStream("trends.csv"), "UTF-16")); 
     String line = null; 
     while ((line = Reader.readLine()) != null) 
     { 
      System.out.println(line); 
     } 
    } 
}