2012-01-05 3 views
9

Я читал CSV-файл, загруженный форма Google тренд, вот содержимое файла при открытии в блокноте (первые две строки только):Чтение CSV-файл в Java добавляет пространство между символами

феррари феррари (ошибка станд)
0,735 2%

Когда я прочитал файл, используя Readline линия считывания содержит пространство между каждым символом, в приведенном выше случае на выходе будет:

f e r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r o r)
0. 7 3 5 2%

(Есть вкладки между «Феррари» и «Феррари», а также между 0,735 и 2%, что StackOverflow не показывает)

Newline символ в конце каждой строки также считывается два раз. Почему? Любое решение?

Вот код, я использую для чтения файла:

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

Edit: Есть также некоторые странные символы чтения в запуске файла

Edut: получили решение

Это была проблема кодирования, которая изменила первую строку на:

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

Похож на Unicode для меня. –

+0

Я запустил ваш точный код на своей машине и напечатал его правильно. В какой среде вы работаете? Windows 7, Eclipse Helios. – Logan

+0

Я использую окна 7 и затмение. Вы скопировали файл из моего вопроса. Используйте этот файл: http://www.google.com/trends/viz?q=ferrari&date=2011-9&geo=all&graph=all_csv&sort=0&scale=1&sa=N –

ответ

13

Это из-за кодировки символов ... Я только что загрузил файл из трендов и попытался, у него была та же проблема.

Я обошел это, если я использую набор символов 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); 
     } 
    } 
}