2012-01-05 54 views
9

我读一个CSV文件下载的形式谷歌趋势之间增加的空间在记事本中打开时,这里有文件的内容(第一个只有两行):阅读CSV文件中的每个字符

法拉利(标准误差)
0.735 2%

当我使用readline线读出包含各字符之间的空间,在上述情况下,输出是读出的文件:

˚FËR R A R I FËR R A R I(式T dËR RöR)
0。 7 3 5 2%

(还有“法拉利”和“法拉利”之间和0.735之间,2%的选项卡,其计算器未示出)

在每一行的末尾换行符也读取的两个倍。 这是为什么?任何解决方案

这里是我使用的读取文件的代码:

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

编辑:也有在文件的起始

Edut读一些奇怪的字符:得到了解决

这是编码问题,将第一行改为:

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

貌似Unicode的给我。 – 2012-01-05 04:33:17

+0

我在机器上运行了您的确切代码并正确打印。你在哪个环境中运行? Windows 7,Eclipse Helios在这里。 – Logan 2012-01-05 04:47:19

+0

我使用的是Windows 7和eclipse。您已从我的问题中复制该文件。使用此文件:http://www.google.com/trends/viz?q=ferrari&date=2011-9&geo=all&graph=all_csv&sort=0&scale=1&sa=N – 2012-01-05 04:50:40

回答

13

这是d用于字符编码......我刚刚从趋势中下载了文件,并尝试过,它也遇到了同样的问题。

我这得到周围如果我使用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); 
     } 
    } 
}