在java中读取CSV文件会在每个字符之间添加空格

时间:2012-01-05 04:29:18

标签: java csv readline filereader

我正在阅读从谷歌趋势下载的CSV文件,这里是在记事本中打开时的文件内容(仅限前两行):

  

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

当我使用readline读取文件时,行读取包含每个字符之间的空格,在上面的情况下输出为:

  

r r r r r r r r r(r t r r r o r)
   0。 7 3 5 2%

(“ferrari”和“ferrari”之间有标签,介于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"));

2 个答案:

答案 0 :(得分:14)

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

如果我使用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);
        }
    }
}

答案 1 :(得分:0)

您需要检查文件的编码,并根据您在阅读文件时指定它:

BufferedReader Reader = new BufferedReader(new InputStreamReader(new 
FileInputStream("trends.csv"), "UTF-8"));

如果您希望UTF-8中的文件然后更改文件的编码而不是代码,那么您可以使用任何开源CSV读取器(如OpenOffice)来读取此文件并在打开时指定编码:)